Skip to content
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

修改batch size #2

Open
xxxxxxxiao opened this issue Mar 17, 2020 · 17 comments
Open

修改batch size #2

xxxxxxxiao opened this issue Mar 17, 2020 · 17 comments

Comments

@xxxxxxxiao
Copy link

你好! 我想请问下为什么修改batch size之后报tensorflow.python.framework.errors_impl.InvalidArgumentError: Not enough time for target transition sequence (required: 4, available: 3)1You can turn this error into a warning by using the flag ignore_longer_outputs_than_inputs
这个错误?
谢谢

@shawnh2
Copy link
Owner

shawnh2 commented Mar 17, 2020

原因是标签(Label)的长度比序列(Sequence)长度要大了。可以在报错函数中设置参数 ignore_longer_outputs_than_inputs=True, 之后这类数据的损失会自动返回0,报错也就消失了。你是在训练哪个模型的时候遇到的错误?CRNN还是EAST?

@xxxxxxxiao
Copy link
Author

CRNN。 这样做的话会不会影响梯度下降呢?

@shawnh2
Copy link
Owner

shawnh2 commented Mar 18, 2020

影响不大

@xxxxxxxiao
Copy link
Author

貌似找到原因了。
val_gen = DataGenerator(val_list, img_size, down_sample_factor, batch_size, max_label_length)
crnn_blstm_ctc.py中这一行的down_sample_factor, batch_size这两个参数位置颠倒了。。

@shawnh2
Copy link
Owner

shawnh2 commented Mar 18, 2020

好的,找的问题就好

@xxxxxxxiao
Copy link
Author

能否问下你最后loss大概是多少?我改batchsize=64训练后测试集loss大概在0.77,但是demo输出的结果都是‘00’或者‘40’这种。不知是哪里操作不对?

@xxxxxxxiao
Copy link
Author

我把你训练的模型加载后再训练,一开始出来的loss很高,请问有没有可能是loss的计算方式有问题?

@shawnh2
Copy link
Owner

shawnh2 commented Mar 20, 2020

损失函数应该不存在问题,降低batch_size试试。

@xxxxxxxiao
Copy link
Author

验证集降到16,应该是跟你训练的时候一样啊。。不知道为什么val loss还是那么高。。。

@gitTaner
Copy link

你好,我用楼主的训练集,进行rcnn模型训练,没改训练参数,直接进行训练,val_loss一直上升,训练到20个epochs左右的时候val_loss还是30左右val_acc接近于0,请问可能哪里出了问题?
楼主训练的rcnn用的参数是最新更新的版本吗?batch_size, aug_num等用的是什么值呢?
希望楼主不吝赐教

@shawnh2
Copy link
Owner

shawnh2 commented May 29, 2020

参数还是源码中的没有更改。你可能训练的数据集不对,请确保是卡号的数据集而不是银行卡的。

@gitTaner
Copy link

gitTaner commented Jun 1, 2020

我使用的平台的Windows,,使用的数据集是楼主银行卡号的数据集,下面是第15个epochs训练完的记录。我是加载楼主的模型继续训练的,aug_number=5,我想测试下楼主模型的在验证集的准确率,结果也是0。在compile 的时候添加了metrics=['accuracy'].
想问下楼主的val_loss训练的时候能达到多少?

281/281 [==================] - 128 455ms/step -loss:0.8534 -acc:0.5514 - val_loss:43.6632 - val_acc:0.0000e+00

@shawnh2
Copy link
Owner

shawnh2 commented Jun 2, 2020

多谢反馈,crnn部分代码已做更新,参照readme的crnn训练方法训练即可

@gitTaner
Copy link

gitTaner commented Jun 3, 2020

多谢反馈,crnn部分代码已做更新,参照readme的crnn训练方法训练即可

1 新版本代码跟预训练模型不匹配,模型没有更新,要运行demo需要把cfg中的numclass 改为10才行
2 训练代码跑了一晚上,增强系数30,到38个epochs,loss 18左右,val_loss貌似还是不降,30几,然后val_acc一直为0

@shawnh2
Copy link
Owner

shawnh2 commented Jun 3, 2020

多谢反馈,crnn部分代码已做更新,参照readme的crnn训练方法训练即可

1 新版本代码跟预训练模型不匹配,模型没有更新,要运行demo需要把cfg中的numclass 改为10才行
2 训练代码跑了一晚上,增强系数30,到38个epochs,loss 18左右,val_loss貌似还是不降,30几,然后val_acc一直为0

反馈问题已提交commit,更新代码。

  1. 新版本模型比原来的新增了空格识别,也就是NUM_CLASSES+1了.
  2. 新版本模型不要在原来模型基础上训练,可尝试从头训练或在README crnn部分下载预训练网络
  3. 新版本模型可以尝试增大aug_nbr、降低batch_size、增大验证集(validation_ratio)来提升训练性能

@gitTaner
Copy link

gitTaner commented Jun 3, 2020

新版本的val_loss训练过程中正常了,与loss趋势基本一致,但是我有几个疑问还请楼主帮我解惑一下
1 老版本的num_class 没有+1,类别为11,那模型是如何识别空格呢与结束符的呢?
2 新版的空格'_'用10填充,未满26位的字符也用10 append,由于我训练还没结束,猜测到时预测出来的结果会是形如eg 【1233_1511_2189_8745___________】吗?
3 老版本的val_loss不下降是因为没有加1导致的吗?
问题实在有点多,我好疑惑啊,o(╯□╰)o,如果大神能帮忙解答一下太棒了

@shawnh2
Copy link
Owner

shawnh2 commented Jun 3, 2020

  1. 老版本并不能识别卡号中的空格(也就是_),在预处理部分将它去除掉了,所以num_classes=10+1 并没有问题,而新版支持,故为12
  2. 不会出现末尾未满26位填充 _ 的情况,数字中间有空白区域会。你可以拿预训练网络实验一下,除了最后几位因训练不足因素没有识别出,其它表现还算乐观
  3. 老版的模型本身并没有太大问题,而是我在数据预处理时的失误。也感谢你问题的提出。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants