SeventhBlue / denseNetTrain

ocr中的densenet网络训练
13 stars 7 forks source link

我用自己的数据loss下降到30左右,val_loss下降到37不再发生变化,但这个我还可以理解可能是我数据集不大或者学习率需要降低。但很诡异的就是accuracy一直为0。 #3

Open shining-love opened 4 years ago

shining-love commented 4 years ago

我看了也有一些人提出这个问题,但都没有一个很好的解释。所以我写了一个回调函数,利用model.predict(),发现输出不是标签值,而是一个shape为(batchsize,)的数组,我觉得很奇怪,后面我想了应该是你outputs定义的不是输出标签而是ctc损失值。我不知道你这个keras代码accuracy是怎么计算的,如果输出是损失值了,那么你代码里的accuracy是咋计算的?求指导

SeventhBlue commented 4 years ago

里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。

shining-love commented 4 years ago

很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢?

在2020年06月21日 21:41,SeventhBlue 写道:

里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

shining-love commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。

在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢?

在2020年06月21日 21:41,SeventhBlue 写道:

里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

SeventhBlue commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

shining-love commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

谢谢大佬

shining-love commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

keras感觉在训练过程中单歩调试进不去get_model函数

shining-love commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

谢谢大佬

还有请问你一下。你这个微调代码自己微调过吗?我除了新改的分类层其余全部冻结了,然后微调。我的训练数据是10w张不定长的英文和数字组合图片。今天我试了很多参数比如更改学习率,batchsize,以及每个epochs下的迭代歩数我都尝试了,但是训练精度最高只有20%多一点,训练loss在8左右。大佬麻烦指导一下啊

shining-love commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

大佬我觉得是不是因为我的微调时的数据是不定长的字符序列,导致真实标签与预测标签存在一种不能对应的现象,比如一个图像的真实标签[2, 4, 15, 32, 10000]与预测标签[2, 4, 15, 32, 2]本来是应该正确的,但这时受真实字典对应的类别影响出现不能预测出这个10000,所以精度乱的很。这时我的一点分析,不知道大佬有什么意见?

SeventhBlue commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

大佬我觉得是不是因为我的微调时的数据是不定长的字符序列,导致真实标签与预测标签存在一种不能对应的现象,比如一个图像的真实标签[2, 4, 15, 32, 10000]与预测标签[2, 4, 15, 32, 2]本来是应该正确的,但这时受真实字典对应的类别影响出现不能预测出这个10000,所以精度乱的很。这时我的一点分析,不知道大佬有什么意见?

试过微调,效果也不好,用的是10万新数据。指导说不上,这个链接(https://github.com/YCG09/chinese_ocr/issues)是原作者的github项目,里面有很多问题以及其他人的尝试,也有我对训练数据的分析,你可以去看看

shining-love commented 4 years ago

大佬。我的字典都已经根据我自己的数据集进行了更改,训练数据的标签也是根据更改后的字典做的,可以对应起来的。 在2020年06月22日 01:23,yang jinyi 写道: 很感谢你的回复。首先说我自己的数据集是模拟生成的不定长的数字和英文的组合数据。其次我不知道model.fitgenerator()函数如何计算的accuracy,因为我们模型的outputs是ctc-loss,所以只要输入inputs中的真实标签而没有预测标签y_pred,所以accuracy如何计算的呢? 在2020年06月21日 21:41,SeventhBlue 写道: 里面具体是啥我忘记了。我记得没错的话输出的应该是训练的字的种类。比如,我想识别中文5666个字,最后的输出应该5666。你训练是用什么训练数据集,自己生成的吗?我觉得最大的可能是训练数据集和那个“字典”不匹配的问题。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

model.fit_generator()是喂数据并统计精度等信息的;输入预测值在函数get_model(img_h, nclass)中,不明白训练过程可以单步调试试试看。

大佬我觉得是不是因为我的微调时的数据是不定长的字符序列,导致真实标签与预测标签存在一种不能对应的现象,比如一个图像的真实标签[2, 4, 15, 32, 10000]与预测标签[2, 4, 15, 32, 2]本来是应该正确的,但这时受真实字典对应的类别影响出现不能预测出这个10000,所以精度乱的很。这时我的一点分析,不知道大佬有什么意见?

试过微调,效果也不好,用的是10万新数据。指导说不上,这个链接(https://github.com/YCG09/chinese_ocr/issues)是原作者的github项目,里面有很多问题以及其他人的尝试,也有我对训练数据的分析,你可以去看看。

好的,谢谢大佬。我这边微调精度正常了。但是还是有点过拟合了