Correct CTC usage in CRNN models

Hi everyone, I am trying to implement a crnn model.

A crnn model, if I understand correctly, consists of an encoder and decoder. The encoder reduces (usually) the image to a ( f(image_widht) x batch_size x hidden_dim ) sized tensor, this tensor is then fed to a decoder – a 1d recurrent neural network or maybe a few of them. Such models, as I know, are used in text recognition.

To ignore aligment the CTC loss is used.

Currently I try overfit a model using the CTC loss but fail. I use the baidu ctc-loss implementation.

I tried both the awins port and the SeanNaren port but they both give similar results – the model outputs just one letter, usually the the blank label. From this follows that the problem is in how I use the CTC loss together with PyTorch, but here is a project with a similar architecture which also makes use of CTC and I can’t find any major differences.

Why is this happening ? Did someone encountered similar problems ?

PS.
I tried to drop the hidden weights but it also did not work.

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable

from warpctc_pytorch import CTCLoss
from torch.utils.data import TensorDataset, DataLoader

from functions.ctc import CTC, CTCLoss as CTCLoss2

import time, math

class RNNModel(nn.Module):
    def __init__(self, ntoken, ninp, nhid):
        super(RNNModel, self).__init__()

        self.rnn = nn.LSTM(ninp, nhid)
        self.decoder = nn.Linear(nhid, ntoken)

        self.init_weights()

        self.nhid = nhid
        self.nlayers = 1

    def init_weights(self):
        initrange = 0.1
        self.decoder.bias.data.fill_(0)
        self.decoder.weight.data.uniform_(-initrange, initrange)

    def forward(self, input, hidden):
        output, hidden = self.rnn(input, hidden)
        decoded = self.decoder(output.view(output.size(0)*output.size(1), output.size(2)))
        return decoded.view(output.size(0), output.size(1), decoded.size(1)), hidden

    def init_hidden(self, bsz):
        weight = next(self.parameters()).data
        return (Variable(weight.new(self.nlayers, bsz, self.nhid).zero_()),
                Variable(weight.new(self.nlayers, bsz, self.nhid).zero_()))

def repackage_hidden(h):
    """Wraps hidden states in new Variables, to detach them from their history."""
    if type(h) == Variable:
        return Variable(h.data)
    else:
        return tuple(repackage_hidden(v) for v in h)

    
DS_SIZE=60
SEQ_LEN=100
DATA_DIM=10

OUT_SIZE=24
NTOKENS=11
BATCH_SIZE=8

data = torch.randn(DS_SIZE, SEQ_LEN, DATA_DIM)
labels = (torch.Tensor(DS_SIZE, OUT_SIZE).uniform_()*10).int()+1
    
ds = TensorDataset(data, labels)
dl = DataLoader(ds, batch_size=BATCH_SIZE, drop_last=True)

model = RNNModel(NTOKENS, DATA_DIM, 50)
criterion = CTCLoss2(blank_label=0)

log_interval = 100


optimizer = optim.SGD(model.parameters(), lr=0.0001, momentum=0.09)

  
label_to_char = lambda label: chr(96 + label) if label != 0 else '@'
def decode_probs(probs):
    ''' 
    probs - seqlen x batchsize x alphabet 
    '''
    ixs = probs.max(2)[1].cpu() # seqlen x batchsize
    res = [ ''.join(map(label_to_char, batch)) for batch in ixs.transpose(0,1) ] 
    return res, ixs

def train(epoch):
    
    total_loss = 0
    start_time = time.time()
    ntokens = NTOKENS
    lr = 0.0000001
    
    hidden = model.init_hidden(BATCH_SIZE)
    
    act_lens = torch.IntTensor(BATCH_SIZE).fill_(SEQ_LEN)
    label_lens = torch.IntTensor(BATCH_SIZE).fill_(OUT_SIZE)
    for it, (data, targets) in enumerate(dl):
        
        hidden = repackage_hidden(hidden)
        model.zero_grad()
        output, hidden = model(Variable(data.transpose(0,1)), hidden)

        output = F.softmax(output, dim=2)
        output = output.transpose(1,0)
        
        V = Variable
        loss = criterion(output, V(targets.view(-1)), V(act_lens), V(label_lens))
        
        loss.backward()
        grad_norm = nn.utils.clip_grad_norm(model.parameters(), 200)
        optimizer.step()

        
        total_loss += loss.data

        if it % log_interval == 0:
            cur_loss = total_loss[0] / log_interval
            elapsed = time.time() - start_time
            print('| epoch {:3d} | lr {} | ms/batch {:5.2f} | '
                    'loss {:5.2f} | ppl {:8.2f} \n\t {} | {} '.format(
                        epoch, lr,
                        elapsed * 1000 / log_interval, cur_loss, math.exp(cur_loss),
                        decode_probs(output.transpose(1,0).data)[0][0],
                        ''.join(map(label_to_char, targets[0]))
                    ))
            print(output[0,:,:])
            print('-'*100)
            
            total_loss = 0
            start_time = time.time()

for epoch in range(1000):
    train(epoch)

output

| epoch   0 | lr 1e-07 | ms/batch  0.47 | loss  1.61 | ppl     4.99 
	 bbbbbjddgdgdgg@gggggggb@bbd@@@bggggg@ggggdbbbhgdfgggghggddggfggggbgggddhggg@@ddgggghbgg@gdgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0934  0.0877  0.0944  ...   0.0911  0.0873  0.0906
 0.0924  0.0902  0.0973  ...   0.0923  0.0849  0.0920
 0.0923  0.0870  0.0959  ...   0.0914  0.0827  0.0923
          ...             ⋱             ...          
 0.0916  0.0861  0.0924  ...   0.0940  0.0890  0.0888
 0.0875  0.0838  0.0922  ...   0.0944  0.0892  0.0873
 0.0890  0.0855  0.0934  ...   0.0933  0.0888  0.0853
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   1 | lr 1e-07 | ms/batch  0.23 | loss  1.61 | ppl     4.99 
	 bbbbbjddgdgdgg@gggggggb@bbd@@@@ggggg@gggg@bbbhgdfgggghggddggf@gggbgggddhggg@@ddgggghbgg@gdgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0936  0.0877  0.0944  ...   0.0911  0.0873  0.0906
 0.0926  0.0902  0.0973  ...   0.0923  0.0849  0.0920
 0.0926  0.0869  0.0958  ...   0.0914  0.0827  0.0923
          ...             ⋱             ...          
 0.0919  0.0861  0.0924  ...   0.0940  0.0890  0.0887
 0.0877  0.0838  0.0922  ...   0.0944  0.0892  0.0873
 0.0892  0.0855  0.0933  ...   0.0933  0.0888  0.0852
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   2 | lr 1e-07 | ms/batch  0.26 | loss  1.61 | ppl     4.99 
	 bbbbbjddgdgdgg@gggggggb@bb@@@@@ggggg@ggg@@bbbhgdfgggghggddggf@gggbggg@@hggg@@ddgggghbgg@gdgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0938  0.0876  0.0943  ...   0.0911  0.0873  0.0905
 0.0929  0.0902  0.0973  ...   0.0922  0.0849  0.0920
 0.0928  0.0869  0.0958  ...   0.0914  0.0827  0.0923
          ...             ⋱             ...          
 0.0921  0.0861  0.0923  ...   0.0939  0.0889  0.0887
 0.0880  0.0838  0.0922  ...   0.0944  0.0892  0.0873
 0.0895  0.0855  0.0933  ...   0.0933  0.0888  0.0852
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   3 | lr 1e-07 | ms/batch  0.27 | loss  1.61 | ppl     4.99 
	 bbbbbjddgdgdgg@gggggggb@bb@@@@@ggggg@ggg@@bbb@gd@gggghggddggf@gggbggg@@hggg@@ddgggghbgg@gdgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
1.00000e-02 *
 9.4080  8.7617  9.4305  ...   9.1057  8.7280  9.0509
 9.3086  9.0137  9.7264  ...   9.2206  8.4845  9.1952
 9.3039  8.6902  9.5793  ...   9.1369  8.2644  9.2270
          ...             ⋱             ...          
 9.2412  8.6040  9.2315  ...   9.3906  8.8911  8.8693
 8.8245  8.3778  9.2143  ...   9.4360  8.9160  8.7226
 8.9737  8.5438  9.3288  ...   9.3263  8.8743  8.5194
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   4 | lr 1e-07 | ms/batch  0.32 | loss  1.61 | ppl     4.99 
	 @bbbbjddgdgdgg@gggggggb@bb@@@@@gggg@@ggg@@bbb@gd@gg@ghggddggf@gggbgg@@@hggg@@ddgggghbgg@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
1.00000e-02 *
 9.4313  8.7593  9.4280  ...   9.1034  8.7263  9.0486
 9.3322  9.0113  9.7238  ...   9.2182  8.4827  9.1927
 9.3278  8.6879  9.5765  ...   9.1345  8.2627  9.2243
          ...             ⋱             ...          
 9.2678  8.6015  9.2287  ...   9.3880  8.8889  8.8664
 8.8495  8.3756  9.2117  ...   9.4335  8.9140  8.7199
 8.9997  8.5414  9.3261  ...   9.3237  8.8721  8.5168
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   5 | lr 1e-07 | ms/batch  0.30 | loss  1.61 | ppl     4.98 
	 @bbbbjddgdgdgg@gggggggb@bb@@@@@gggg@@ggg@@bbb@gd@gg@ghgg@dggf@gggbgg@@@hggg@@ddgggghbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0945  0.0876  0.0943  ...   0.0910  0.0872  0.0905
 0.0936  0.0901  0.0972  ...   0.0922  0.0848  0.0919
 0.0935  0.0869  0.0957  ...   0.0913  0.0826  0.0922
          ...             ⋱             ...          
 0.0929  0.0860  0.0923  ...   0.0939  0.0889  0.0886
 0.0887  0.0837  0.0921  ...   0.0943  0.0891  0.0872
 0.0903  0.0854  0.0932  ...   0.0932  0.0887  0.0851
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   6 | lr 1e-07 | ms/batch  0.26 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@gggggggb@bb@@@@@gggg@@ggg@@bbb@gd@gg@ghgg@dggf@gggbgg@@@h@gg@@dd@gg@hbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0948  0.0875  0.0942  ...   0.0910  0.0872  0.0904
 0.0938  0.0901  0.0972  ...   0.0921  0.0848  0.0919
 0.0938  0.0868  0.0957  ...   0.0913  0.0826  0.0922
          ...             ⋱             ...          
 0.0932  0.0860  0.0922  ...   0.0938  0.0888  0.0886
 0.0890  0.0837  0.0921  ...   0.0943  0.0891  0.0871
 0.0905  0.0854  0.0932  ...   0.0932  0.0887  0.0851
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   7 | lr 1e-07 | ms/batch  0.28 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@gggggggb@bb@@@@@gggg@@ggg@@bbb@gd@gg@ghgg@dgg@@gggbgg@@@h@gg@@dd@gg@hbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0950  0.0875  0.0942  ...   0.0910  0.0872  0.0904
 0.0940  0.0900  0.0972  ...   0.0921  0.0848  0.0919
 0.0940  0.0868  0.0957  ...   0.0913  0.0826  0.0922
          ...             ⋱             ...          
 0.0935  0.0859  0.0922  ...   0.0938  0.0888  0.0886
 0.0893  0.0837  0.0920  ...   0.0943  0.0891  0.0871
 0.0908  0.0853  0.0932  ...   0.0932  0.0887  0.0851
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   8 | lr 1e-07 | ms/batch  0.43 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@ggggg@gb@bb@@@@@gggg@@ggg@@bbb@gd@gg@ghgg@dgg@@g@gbgg@@@@@gg@@dd@gg@hbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0953  0.0875  0.0942  ...   0.0909  0.0872  0.0904
 0.0943  0.0900  0.0971  ...   0.0921  0.0848  0.0918
 0.0942  0.0868  0.0957  ...   0.0913  0.0826  0.0921
          ...             ⋱             ...          
 0.0938  0.0859  0.0922  ...   0.0938  0.0888  0.0885
 0.0895  0.0837  0.0920  ...   0.0942  0.0891  0.0871
 0.0911  0.0853  0.0932  ...   0.0931  0.0886  0.0851
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch   9 | lr 1e-07 | ms/batch  0.30 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@ggggg@gb@bb@@@@@gggg@@ggg@@bbb@gd@gg@ghgg@dgg@@g@gbgg@@@@@gg@@dd@gg@hbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0955  0.0875  0.0942  ...   0.0909  0.0872  0.0904
 0.0945  0.0900  0.0971  ...   0.0921  0.0847  0.0918
 0.0945  0.0868  0.0956  ...   0.0912  0.0825  0.0921
          ...             ⋱             ...          
 0.0940  0.0859  0.0921  ...   0.0937  0.0888  0.0885
 0.0898  0.0836  0.0920  ...   0.0942  0.0890  0.0871
 0.0913  0.0853  0.0931  ...   0.0931  0.0886  0.0850
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  10 | lr 1e-07 | ms/batch  0.31 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@ggggg@gb@bb@@@@@gggg@@gg@@@bb@@gd@gg@@hgg@dgg@@g@gbgg@@@@@gg@@d@@gg@hbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0957  0.0874  0.0941  ...   0.0909  0.0872  0.0903
 0.0948  0.0900  0.0971  ...   0.0920  0.0847  0.0918
 0.0947  0.0867  0.0956  ...   0.0912  0.0825  0.0921
          ...             ⋱             ...          
 0.0943  0.0859  0.0921  ...   0.0937  0.0888  0.0885
 0.0900  0.0836  0.0920  ...   0.0942  0.0890  0.0870
 0.0916  0.0853  0.0931  ...   0.0931  0.0886  0.0850
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  11 | lr 1e-07 | ms/batch  0.27 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@ggggg@gb@bb@@@@@gggg@@gg@@@bb@@gd@g@@@hgg@dgg@@g@gbgg@@@@@gg@@d@@gg@hbg@@@dgggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0960  0.0874  0.0941  ...   0.0909  0.0871  0.0903
 0.0950  0.0899  0.0971  ...   0.0920  0.0847  0.0917
 0.0950  0.0867  0.0956  ...   0.0912  0.0825  0.0921
          ...             ⋱             ...          
 0.0946  0.0858  0.0921  ...   0.0937  0.0887  0.0885
 0.0903  0.0836  0.0919  ...   0.0942  0.0890  0.0870
 0.0919  0.0852  0.0931  ...   0.0931  0.0886  0.0850
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  12 | lr 1e-07 | ms/batch  0.25 | loss  1.61 | ppl     4.98 
	 @bbbhjddgdgdgg@ggggg@gb@bb@@@@@gggg@@gg@@@b@@@gd@g@@@hgg@dg@@@@@gbgg@@@@@g@@@@@@gg@h@g@@@d@ggggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0962  0.0874  0.0941  ...   0.0908  0.0871  0.0903
 0.0953  0.0899  0.0970  ...   0.0920  0.0847  0.0917
 0.0952  0.0867  0.0955  ...   0.0912  0.0825  0.0920
          ...             ⋱             ...          
 0.0949  0.0858  0.0921  ...   0.0937  0.0887  0.0884
 0.0906  0.0836  0.0919  ...   0.0941  0.0890  0.0870
 0.0921  0.0852  0.0930  ...   0.0930  0.0885  0.0849
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  13 | lr 1e-07 | ms/batch  0.25 | loss  1.61 | ppl     4.98 
	 @bbbhj@dg@gdgg@ggggg@g@@@@@@@@@gggg@@gg@@@b@@@gd@g@@@hgg@dg@@@@@g@gg@@@@@g@@@@@@@g@h@g@@@d@@gggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0965  0.0874  0.0940  ...   0.0908  0.0871  0.0903
 0.0955  0.0899  0.0970  ...   0.0920  0.0847  0.0917
 0.0955  0.0867  0.0955  ...   0.0911  0.0825  0.0920
          ...             ⋱             ...          
 0.0951  0.0858  0.0920  ...   0.0936  0.0887  0.0884
 0.0908  0.0836  0.0919  ...   0.0941  0.0890  0.0869
 0.0924  0.0852  0.0930  ...   0.0930  0.0885  0.0849
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  14 | lr 1e-07 | ms/batch  0.24 | loss  1.61 | ppl     4.98 
	 @b@bhj@dg@@@gg@g@ggg@@@@@@@@@@@gggg@@gg@@@b@@@gd@g@@@hgg@dg@@@@@g@gg@@@@@g@@@@@@@g@h@g@@@d@@gggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0967  0.0873  0.0940  ...   0.0908  0.0871  0.0902
 0.0958  0.0899  0.0970  ...   0.0919  0.0846  0.0917
 0.0957  0.0866  0.0955  ...   0.0911  0.0824  0.0920
          ...             ⋱             ...          
 0.0954  0.0858  0.0920  ...   0.0936  0.0887  0.0884
 0.0911  0.0835  0.0918  ...   0.0941  0.0889  0.0869
 0.0927  0.0852  0.0930  ...   0.0930  0.0885  0.0849
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  15 | lr 1e-07 | ms/batch  0.26 | loss  1.61 | ppl     4.98 
	 @b@bh@@dg@@@gg@g@ggg@@@@@@@@@@@gggg@@@g@@@@@@@gd@g@@@hgg@@g@@@@@g@gg@@@@@g@@@@@@@g@h@@@@@@@@gggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0970  0.0873  0.0940  ...   0.0908  0.0871  0.0902
 0.0960  0.0898  0.0969  ...   0.0919  0.0846  0.0916
 0.0960  0.0866  0.0955  ...   0.0911  0.0824  0.0919
          ...             ⋱             ...          
 0.0957  0.0857  0.0920  ...   0.0936  0.0886  0.0883
 0.0913  0.0835  0.0918  ...   0.0941  0.0889  0.0869
 0.0930  0.0851  0.0930  ...   0.0929  0.0885  0.0849
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  16 | lr 1e-07 | ms/batch  0.26 | loss  1.61 | ppl     4.98 
	 @b@bh@@d@@@@gg@g@ggg@@@@@@@@@@@gggg@@@g@@@@@@@gd@g@@@hgg@@g@@@@@g@@g@@@@@g@@@@@@@g@h@@@@@@@@gggggggg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0972  0.0873  0.0940  ...   0.0907  0.0870  0.0902
 0.0963  0.0898  0.0969  ...   0.0919  0.0846  0.0916
 0.0962  0.0866  0.0954  ...   0.0911  0.0824  0.0919
          ...             ⋱             ...          
 0.0960  0.0857  0.0919  ...   0.0936  0.0886  0.0883
 0.0916  0.0835  0.0918  ...   0.0940  0.0889  0.0869
 0.0932  0.0851  0.0929  ...   0.0929  0.0885  0.0848
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  17 | lr 1e-07 | ms/batch  0.27 | loss  1.61 | ppl     4.98 
	 @b@@h@@d@@@@g@@g@ggg@@@@@@@@@@@@gg@@@@g@@@@@@@gd@g@@@hgg@@@@@@@@@@@g@@@@@@@@@@@@@g@h@@@@@@@@ggggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0974  0.0873  0.0939  ...   0.0907  0.0870  0.0902
 0.0965  0.0898  0.0969  ...   0.0919  0.0846  0.0916
 0.0965  0.0866  0.0954  ...   0.0910  0.0824  0.0919
          ...             ⋱             ...          
 0.0963  0.0857  0.0919  ...   0.0935  0.0886  0.0883
 0.0919  0.0835  0.0918  ...   0.0940  0.0889  0.0868
 0.0935  0.0851  0.0929  ...   0.0929  0.0884  0.0848
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  18 | lr 1e-07 | ms/batch  0.27 | loss  1.61 | ppl     4.98 
	 @b@@h@@@@@@@@@@@@ggg@@@@@@@@@@@@gg@@@@g@@@@@@@gd@g@@@h@g@@@@@@@@@@@g@@@@@@@@@@@@@g@h@@@@@@@@ggggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0977  0.0872  0.0939  ...   0.0907  0.0870  0.0902
 0.0968  0.0898  0.0969  ...   0.0918  0.0846  0.0916
 0.0968  0.0866  0.0954  ...   0.0910  0.0824  0.0919
          ...             ⋱             ...          
 0.0966  0.0857  0.0919  ...   0.0935  0.0886  0.0882
 0.0922  0.0834  0.0917  ...   0.0940  0.0888  0.0868
 0.0938  0.0851  0.0929  ...   0.0929  0.0884  0.0848
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  19 | lr 1e-07 | ms/batch  0.26 | loss  1.61 | ppl     4.98 
	 @@@@h@@@@@@@@@@@@g@g@@@@@@@@@@@@gg@@@@g@@@@@@@gd@@@@@h@g@@@@@@@@@@@g@@@@@@@@@@@@@g@h@@@@@@@@g@ggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0980  0.0872  0.0939  ...   0.0907  0.0870  0.0901
 0.0970  0.0897  0.0968  ...   0.0918  0.0846  0.0915
 0.0970  0.0865  0.0953  ...   0.0910  0.0824  0.0918
          ...             ⋱             ...          
 0.0969  0.0856  0.0919  ...   0.0935  0.0885  0.0882
 0.0924  0.0834  0.0917  ...   0.0939  0.0888  0.0868
 0.0941  0.0850  0.0928  ...   0.0928  0.0884  0.0847
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  20 | lr 1e-07 | ms/batch  0.26 | loss  1.60 | ppl     4.98 
	 @@@@h@@@@@@@@@@@@g@g@@@@@@@@@@@@gg@@@@g@@@@@@@gd@@@@@h@g@@@@@@@@@@@g@@@@@@@@@@@@@g@h@@@@@@@@@@ggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0982  0.0872  0.0939  ...   0.0906  0.0870  0.0901
 0.0973  0.0897  0.0968  ...   0.0918  0.0845  0.0915
 0.0973  0.0865  0.0953  ...   0.0910  0.0823  0.0918
          ...             ⋱             ...          
 0.0971  0.0856  0.0918  ...   0.0934  0.0885  0.0882
 0.0927  0.0834  0.0917  ...   0.0939  0.0888  0.0867
 0.0944  0.0850  0.0928  ...   0.0928  0.0884  0.0847
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  21 | lr 1e-07 | ms/batch  0.26 | loss  1.60 | ppl     4.98 
	 @@@@h@@@@@@@@@@@@g@@@@@@@@@@@@@@gg@@@@g@@@@@@@gd@@@@@h@g@@@@@@@@@@@g@@@@@@@@@@@@@@@h@@@@@@@@@@ggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0985  0.0872  0.0938  ...   0.0906  0.0870  0.0901
 0.0975  0.0897  0.0968  ...   0.0918  0.0845  0.0915
 0.0975  0.0865  0.0953  ...   0.0909  0.0823  0.0918
          ...             ⋱             ...          
 0.0974  0.0856  0.0918  ...   0.0934  0.0885  0.0882
 0.0930  0.0834  0.0917  ...   0.0939  0.0888  0.0867
 0.0947  0.0850  0.0928  ...   0.0928  0.0883  0.0847
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  22 | lr 1e-07 | ms/batch  0.40 | loss  1.60 | ppl     4.98 
	 @@@@h@@@@@@@@@@@@g@@@@@@@@@@@@@@gg@@@@g@@@@@@@gd@@@@@h@@@@@@@@@@@@@g@@@@@@@@@@@@@@@h@@@@@@@@@@ggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0987  0.0871  0.0938  ...   0.0906  0.0869  0.0900
 0.0978  0.0897  0.0967  ...   0.0917  0.0845  0.0915
 0.0978  0.0865  0.0953  ...   0.0909  0.0823  0.0917
          ...             ⋱             ...          
 0.0977  0.0855  0.0918  ...   0.0934  0.0885  0.0881
 0.0933  0.0833  0.0916  ...   0.0939  0.0888  0.0867
 0.0949  0.0850  0.0928  ...   0.0928  0.0883  0.0847
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  23 | lr 1e-07 | ms/batch  0.26 | loss  1.60 | ppl     4.98 
	 @@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@gg@@@@g@@@@@@@gd@@@@@h@@@@@@@@@@@@@g@@@@@@@@@@@@@@@h@@@@@@@@@@ggg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0990  0.0871  0.0938  ...   0.0906  0.0869  0.0900
 0.0981  0.0896  0.0967  ...   0.0917  0.0845  0.0914
 0.0981  0.0864  0.0952  ...   0.0909  0.0823  0.0917
          ...             ⋱             ...          
 0.0980  0.0855  0.0917  ...   0.0934  0.0885  0.0881
 0.0935  0.0833  0.0916  ...   0.0938  0.0887  0.0867
 0.0952  0.0849  0.0927  ...   0.0927  0.0883  0.0846
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  24 | lr 1e-07 | ms/batch  0.26 | loss  1.60 | ppl     4.98 
	 @@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@g@@@@@g@@@@@@@gd@@@@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@@h@@@@@@@@@@@gg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0992  0.0871  0.0937  ...   0.0905  0.0869  0.0900
 0.0983  0.0896  0.0967  ...   0.0917  0.0845  0.0914
 0.0983  0.0864  0.0952  ...   0.0908  0.0823  0.0917
          ...             ⋱             ...          
 0.0983  0.0855  0.0917  ...   0.0933  0.0884  0.0881
 0.0938  0.0833  0.0916  ...   0.0938  0.0887  0.0866
 0.0955  0.0849  0.0927  ...   0.0927  0.0883  0.0846
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  25 | lr 1e-07 | ms/batch  0.27 | loss  1.60 | ppl     4.98 
	 @@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@g@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@@@@@@gg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0995  0.0871  0.0937  ...   0.0905  0.0869  0.0900
 0.0986  0.0896  0.0967  ...   0.0917  0.0844  0.0914
 0.0986  0.0864  0.0952  ...   0.0908  0.0822  0.0917
          ...             ⋱             ...          
 0.0986  0.0855  0.0917  ...   0.0933  0.0884  0.0880
 0.0941  0.0833  0.0915  ...   0.0938  0.0887  0.0866
 0.0958  0.0849  0.0927  ...   0.0927  0.0882  0.0846
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  26 | lr 1e-07 | ms/batch  0.26 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@@@@@@gg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.0998  0.0870  0.0937  ...   0.0905  0.0869  0.0899
 0.0989  0.0896  0.0966  ...   0.0916  0.0844  0.0913
 0.0989  0.0864  0.0951  ...   0.0908  0.0822  0.0916
          ...             ⋱             ...          
 0.0989  0.0854  0.0916  ...   0.0933  0.0884  0.0880
 0.0944  0.0832  0.0915  ...   0.0938  0.0887  0.0866
 0.0961  0.0848  0.0926  ...   0.0926  0.0882  0.0845
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  27 | lr 1e-07 | ms/batch  0.40 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@@@@@@gg@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1000  0.0870  0.0937  ...   0.0905  0.0868  0.0899
 0.0991  0.0895  0.0966  ...   0.0916  0.0844  0.0913
 0.0991  0.0863  0.0951  ...   0.0908  0.0822  0.0916
          ...             ⋱             ...          
 0.0992  0.0854  0.0916  ...   0.0932  0.0884  0.0880
 0.0947  0.0832  0.0915  ...   0.0937  0.0886  0.0865
 0.0964  0.0848  0.0926  ...   0.0926  0.0882  0.0845
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  28 | lr 1e-07 | ms/batch  0.41 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1003  0.0870  0.0936  ...   0.0904  0.0868  0.0899
 0.0994  0.0895  0.0966  ...   0.0916  0.0844  0.0913
 0.0994  0.0863  0.0951  ...   0.0907  0.0822  0.0916
          ...             ⋱             ...          
 0.0995  0.0854  0.0916  ...   0.0932  0.0883  0.0879
 0.0949  0.0832  0.0914  ...   0.0937  0.0886  0.0865
 0.0967  0.0848  0.0926  ...   0.0926  0.0882  0.0845
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  29 | lr 1e-07 | ms/batch  0.45 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gg | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1005  0.0870  0.0936  ...   0.0904  0.0868  0.0899
 0.0997  0.0895  0.0965  ...   0.0915  0.0844  0.0913
 0.0997  0.0863  0.0950  ...   0.0907  0.0822  0.0915
          ...             ⋱             ...          
 0.0998  0.0853  0.0916  ...   0.0932  0.0883  0.0879
 0.0952  0.0832  0.0914  ...   0.0937  0.0886  0.0865
 0.0970  0.0848  0.0925  ...   0.0926  0.0881  0.0844
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  30 | lr 1e-07 | ms/batch  0.29 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g@ | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1008  0.0869  0.0936  ...   0.0904  0.0868  0.0898
 0.0999  0.0894  0.0965  ...   0.0915  0.0843  0.0912
 0.1000  0.0863  0.0950  ...   0.0907  0.0821  0.0915
          ...             ⋱             ...          
 0.1002  0.0853  0.0915  ...   0.0931  0.0883  0.0879
 0.0955  0.0831  0.0914  ...   0.0936  0.0886  0.0864
 0.0973  0.0847  0.0925  ...   0.0925  0.0881  0.0844
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  31 | lr 1e-07 | ms/batch  0.23 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g@ | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1011  0.0869  0.0935  ...   0.0904  0.0868  0.0898
 0.1002  0.0894  0.0965  ...   0.0915  0.0843  0.0912
 0.1002  0.0862  0.0950  ...   0.0907  0.0821  0.0915
          ...             ⋱             ...          
 0.1005  0.0853  0.0915  ...   0.0931  0.0882  0.0878
 0.0958  0.0831  0.0914  ...   0.0936  0.0885  0.0864
 0.0976  0.0847  0.0925  ...   0.0925  0.0881  0.0844
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  32 | lr 1e-07 | ms/batch  0.35 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@gd@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g@ | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1013  0.0869  0.0935  ...   0.0903  0.0867  0.0898
 0.1005  0.0894  0.0964  ...   0.0915  0.0843  0.0912
 0.1005  0.0862  0.0949  ...   0.0906  0.0821  0.0914
          ...             ⋱             ...          
 0.1008  0.0853  0.0915  ...   0.0931  0.0882  0.0878
 0.0961  0.0831  0.0913  ...   0.0936  0.0885  0.0864
 0.0979  0.0847  0.0924  ...   0.0925  0.0881  0.0844
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  33 | lr 1e-07 | ms/batch  0.44 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g@ | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1016  0.0869  0.0935  ...   0.0903  0.0867  0.0898
 0.1008  0.0894  0.0964  ...   0.0914  0.0843  0.0911
 0.1008  0.0862  0.0949  ...   0.0906  0.0821  0.0914
          ...             ⋱             ...          
 0.1011  0.0852  0.0914  ...   0.0930  0.0882  0.0878
 0.0964  0.0831  0.0913  ...   0.0936  0.0885  0.0863
 0.0982  0.0846  0.0924  ...   0.0924  0.0880  0.0843
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------
| epoch  34 | lr 1e-07 | ms/batch  0.26 | loss  1.60 | ppl     4.97 
	 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g@ | bjdbeiabaeagdcbdehcffgja 
Variable containing:
 0.1019  0.0868  0.0935  ...   0.0903  0.0867  0.0897
 0.1010  0.0893  0.0964  ...   0.0914  0.0842  0.0911
 0.1011  0.0861  0.0949  ...   0.0906  0.0821  0.0914
          ...             ⋱             ...          
 0.1014  0.0852  0.0914  ...   0.0930  0.0882  0.0877
 0.0967  0.0830  0.0913  ...   0.0935  0.0885  0.0863
 0.0986  0.0846  0.0924  ...   0.0924  0.0880  0.0843
[torch.FloatTensor of size 100x11]

----------------------------------------------------------------------------------------------------

Hi, did you solve this problem? I am using crnn.pytorch, Pytorch 0.4.0 and SeanNaren/warpctc to recognize handwritten characters. My training loss does not decrease and the model outputs just blank labels.

I am facing the same issue. Did you find the solution?