-
Notifications
You must be signed in to change notification settings - Fork 684
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在ctc_pytorch的训练过程中,损失值总会变为nan #29
Comments
loss nan 是因为 target_length 过长,input_length 过短。 CTCLoss 要求 有关代码: if (s < 2*max_target_length+1)
log_alpha_data[la_batch_offset + la_input_stride * t + la_target_stride * s] = neginf;
} https://github.com/pytorch/pytorch/blob/v1.1.0/aten/src/ATen/native/cuda/LossCTC.cu#L139-L141 解决方法:
|
但调整了input_length的长度,在ipynb文件开头设置了 RuntimeError: Expected tensor to have size at least 6 at dimension 1, but got size 64 for argument #2 'targets' (while checking arguments for ctc_loss_gpu) 这样的问题,查询了一下来源,说是input_length过长而导致。 |
测试模型输出尺寸model = Model(n_classes, input_shape=(3, height, width))
inputs = torch.zeros((32, 3, height, width))
outputs = model(inputs)
outputs.shape
# torch.Size([12, 32, 37]) 这里的 12 就是 input_length,你可以跑一下这段代码,看看你的图像尺寸输入到模型以后,输出的 length 是多少,然后再修改 n_input_length 。 |
是的,一开始的时候对于n_input_length 进行修改的时候,也是比对原文 按照这里的输出,修改为了6,结果想不到原来CTCLoss是有要求的,回头确实要好好看一下。 顺带插一句隔壁的题外话,在TensorFlow相关的ipynb文件中,您对于模型的evaluate都是编写了一个 |
相关信息
pytorch版本使用的是1.1.0;
系统是Ubuntu16.04;
相关修改
代码基本没有修改,只是改了输入图片的尺寸为
96*34
后,对应的生成器其中的参数n_input_length = 6
也进行了修改,并未报错。问题
训练中,loss总是会变为nan,尝试着改batch_size和lr,也只能让其晚出现2个epoch左右,acc至多变为70左右。
求指点啊TAT
The text was updated successfully, but these errors were encountered: