Closed Sierkinhane closed 4 years ago
你好,更新的代码适用的数据集适用于原来的360M中文数据集,通过以下操作进行准备:
@changwh crnn.py出现的错误提示是什么呢?
你好,更新的代码适用的数据集适用于原来的360M中文数据集,通过以下操作进行准备:
1. 将pytorch更新至v1.1.0 2. 首先准备训练集与测试集的标签:python preprocessing.py to prepare train.txt and test.txt 3. 修改crnn_main_v2.py程序中的图片、标签路径 4. 运行:python crnn_main_v2.py --cuda
@changwh crnn.py出现的错误提示是什么呢?
你看看代码就知道了
OK了,删除的时候遗漏了
OK了,删除的时候遗漏了
顺便帮我看看另外一个issue吧,多谢啦。
您好,按照您的步骤,我对于train和test的label使用preprocessing.py
进行处理,修改了地址之后,运行出现了以下错误提示
ValueError: invalid literal for int() with base 10: '军(西点1912年班'
@AemaH 试试我制作的标签文件 链接:https://pan.baidu.com/s/1rd4tm0sCq5fFgB2ziUxcrA 提取码:w877
@AemaH 报错的是哪条语句?
@Sierkinhane 谢谢您,是line11,之前的label我是从您的CSDN博客中
图片与之对应的标签我链接:https://pan.baidu.com/s/1jfAKQVjD-SMJSffOwGhh8A 密码:u7bo
下载下来得到,然后运行出现了错误,紧接着我在https://pan.baidu.com/s/1dFda6R3#list/path=%2F 下载了这个版本的label,采用您的preprocessing.py
,倒是可以使用,只是训练的时候,在验证集上准确率会很低,训练了3个epoch,只有不到10%,可能也是因为我将dataloader长度限制为320000的原因。
@Sierkinhane 您好,在使用了您所制作的标签文件作为train和test的label之后,进行训练。一方面因为每个epoch太长,于是我将dataloader长度限制在了320000,然后进行训练,出现了loss变为nan的情况,此前的loss都还很高,在0.01以上。
你的pytorch版本是多少?
@Sierkinhane 系统为Ubuntu18.04
用的是这个仓库最新的代码吧?可以把你前面的loss的情况发来看看吗
@Sierkinhane 是的 都是两天前git下来的,,loss的话请等一下,使用vscode连的ssh跑的,所以之前的loss 不见了都
想起了之前看到的这个关于CTCLoss设置导致loss变为nan的问题 https://github.com/ypwhs/captcha_break/issues/29
@Sierkinhane 您好,刚刚看了下您其中定义的CTCLoss的输入参数:
https://github.com/Sierkinhane/crnn_chinese_characters_rec/blob/9b5ca05d1c537ff99980db358b4ac1c57ada4341/crnn_main_v2.py#L100
发现其中用来表示input_lengths和target_length
的preds_size和length
,前者仅为41,而后者为32。
但CTCLoss不是要求 input_length >= 2 * target_length + 1,比如 abcd 这个label,输出必须能放得下 -a-b-c-d-,不然就会 nan吗?
有关代码:
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
您好,这是我之前有一次训练loss变为nan的情况
这是刚刚loss变为nan的情况:
抱歉,刚刚我仔细看了下代码中的CTCLoss的输入,才发现自己修改后 preds_size, length各自是81和10,就算不进行模型的修改,也是41和10,是肯定满足的,是我搞错了,抱歉😂,可能是学习率的原因我再修改一下试试看
@AemaH 这个nan应该是pytorch ctcloss的一个bug,我在主程序中加了一段别人的掩码技巧,这个方法倒是可以解决nan的问题,但是准确率方面我还没空去验证,你可以尝试一下?
增加了crnn_main_v2.py中的129-132和185行
@Sierkinhane 好的😁
@Sierkinhane 您的新版代码129-132缩进有点问题
您好,刚刚跑设置为全部train集合大小,跑完了一个epoch,得到的准确率为96。
@Sierkinhane 问一下您这个backward_hook()在哪里使用呢?
@Sierkinhane 问一下您这个backward_hook()在哪里使用呢?
同问,我这边也报错,找不到backward_hook NameError: name 'backward_hook' is not defined
我在crnn_main_v2.py中增加的129-132行和185行就是
好的,谢谢,之前没看到185的内容 ^-^
@Sierkinhane 您好,出现了问题就是:训练出来的模型,加载后完全无法识别图片,输出的结果为空白,而且就算是识别训练集和验证集上的图片依旧是没有结果的。所以就很好奇那个准确率是怎么有的
@AemaH 训练时验证的准确率怎么样?你把你的模型发我邮箱
@AemaH 我想我找到问题了,我测试一下。
@CharlesWu123 我是修改了函数的缩进,解决了问题
@AemaH 把模型发我QQ邮箱917407614
对,解决了,缩进问题,还有就是backward_hook 的第一个参数应该是代表的module。现在我自己的数据也跑起来了,就是损失刚开始很大,2000多,是不是有什么问题。tensorflow跑起来后损失200多,现在收敛到10几不动了,我估计我这边数据处理还是有些问题。
@AemaH 新代码已经更新至test.py
很奇怪,loss尽然变成了负值
@vlzzhou 下载这个仓库最新的代码,loss为负值和nan都已经解决
你们的loss怎么变化的呢,我的loss变成负的了,有没有什么解决办法呢@AemaH@CharlesWu123 @Sierkinhane@yanmeizhao
@Sierkinhane博主您好,我就是下载今天的github进行训练的,结果出现了loss负值情况。nan的问题没有出现,但是出现了loss负数的情况。
Pytorch 更新到1.10没,刚开始正常的loss应该是70左右
更新了,开始是50多,后来减少到0左右,一会正一会负
在2019年08月02日 22:18,Louis. 写道:
Pytorch 更新到1.10没,刚开始正常的loss应该是70左右
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.
@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej
谢谢,你那个parems参数设置是多少啊?一开始我的loss值也是50多,最后慢慢变成了0左右,正负变化。这个和样本的数量有关系吗?
在2019年08月02日 23:39,AemaH 写道:
@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
额 批次的大小只是影响loss下降的趋势 不会影响loss的正负吧,我使用的默认的值跑的 也就是batch为32之类的,dataloader的长度我还没调整
发自我的iPhone
------------------ 原始邮件 ------------------ 发件人: vlzzhou notifications@github.com 发送时间: 2019年8月2日 23:45 收件人: Sierkinhane/crnn_chinese_characters_rec crnn_chinese_characters_rec@noreply.github.com 抄送: AemaH 934966706@qq.com, Mention mention@noreply.github.com 主题: 回复:[Sierkinhane/crnn_chinese_characters_rec] 代码已经更新,关于新版本的问题可以在这里提出 (#124)
谢谢,你那个parems参数设置是多少啊?一开始我的loss值也是50多,最后慢慢变成了0左右,正负变化。这个和样本的数量有关系吗?
在2019年08月02日 23:39,AemaH 写道:
@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
我用的batchsize是32,dateloder设置不设置,结果都会出现loss负值,搞不懂为什么
在2019年08月02日 23:50,AemaH 写道: 额 批次的大小只是影响loss下降的趋势 不会影响loss的正负吧,我使用的默认的值跑的 也就是batch为32之类的,dataloader的长度我还没调整
发自我的iPhone
------------------ 原始邮件 ------------------ 发件人: vlzzhou notifications@github.com 发送时间: 2019年8月2日 23:45 收件人: Sierkinhane/crnn_chinese_characters_rec crnn_chinese_characters_rec@noreply.github.com 抄送: AemaH 934966706@qq.com, Mention mention@noreply.github.com 主题: 回复:[Sierkinhane/crnn_chinese_characters_rec] 代码已经更新,关于新版本的问题可以在这里提出 (#124)
谢谢,你那个parems参数设置是多少啊?一开始我的loss值也是50多,最后慢慢变成了0左右,正负变化。这个和样本的数量有关系吗?
在2019年08月02日 23:39,AemaH 写道:
@vlzzhou 我没有出现loss变为负数的情况,刚刚跑了一个epoch,loss变化情况不介意的话可以参考一下。链接:https://pan.baidu.com/s/1CPMmYwNwUic1HmbKYKnpbw 密码:laej
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
我的pytorch已经是最新版本1.1.0,而且现在loss初始值是70左右。我用的迁移学习,使用了您的预训练模型继续训练,自己添加的样本只有两千张,没有扩充。val_datelodor也设置了。没有下载360万的数据集。这个会不会有影响呢?但是loss值跑到后面就会在0左右摆动,一会正一会负,accuracy只有0.4左右。params中best_accuracy设置为50答不到,会一直答不到。不知道为什么loss会出现低于0的情况。训练样本大小我都还为了(280,32)。
在2019年08月02日 22:18,Louis. 写道:
Pytorch 更新到1.10没,刚开始正常的loss应该是70左右
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.
我的loss值降低,我查了一下代码,utils.py文件中计算loss的数值时,def add(self,v)函数中的v变为在正负之间变动,所以导致loss结果在正负之间跳动。 criterion(preds, text, preds_size, length)这个的计算存在问题
我的loss值降低,我查了一下代码,utils.py文件中计算loss的数值时,def add(self,v)函数中的v变为在正负之间变动,所以导致loss结果在正负之间跳动。 criterion(preds, text, preds_size, length)这个的计算存在问题
@vlzzhou crnn.py中网络的前向传播最后添加log max没?
很怪异的现象 在2019年08月03日 18:04,Louis. 写道:
@vlzzhou crnn.py中网络的前向传播最后添加log max没?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
新版本代码暂时碰到两个坑就没再继续测试了 1.models/crnn.py中最后两行有误 2.crnn_main_v2.py中147行的数据集未给出,是否应该改成 --trainroot 和 --valroot 传入的参数