I actually have a hard time understanding why log should be called before log_softmax because as the description of CTCLoss states :

Blockquote
Log_probs: Tensor of size (T, N, C)… The logarithmized probabilities of the outputs (e.g. obtained with torch.nn.functional.log_softmax() 1).

So I was expecting the call to log_softmax to do the log on its own (as described in the doc 1).
Either way I tried calling .log() on my actual outputs and not this small example and the training produced the same error (predicting only blanks) so I’m back to square one.