SeventhBlue / denseNetTrain

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

微调问题 #4

Open shining-love opened 4 years ago

shining-love commented 4 years ago

你好大佬,我在微调这个repo以及YCG那个repo时发现一个很奇怪的问题,为什么训练精度acc总是从0开始慢慢往上升,按道理基于预训练模型再训练应该初始精度不为0才对啊,所以感到很奇怪,不知大佬在在再训练(微调)是不是这种情况?我的数据是英文数字组合

SeventhBlue commented 4 years ago

我印象中记得好像也是,不过微调时acc上升的速度要比重新训练上升的速度要快,你可以留意一下这种速度上的差异。对于为啥是从0慢慢的开始上升,我的一个解释是:微调时的“词典”和原本的“词典”不是子集和父集的关系。假设,原本的“词典”是6000个中、英、特殊符号等字符(第一种情况,特殊字符全部都在“词典”的最后面;第二种,特殊字符杂乱分布)。 微调时去掉特殊字符,对于第一种情况,微调就是原训练“词典”的子集,这个情况开始训练的时候,网络预测的位置和真实“字典”的位置是对应,这个时候的准确度应该会从零一下到很高的位置; 第二种情况,它们的词典就不是子集和父集的关系,用一个例子说明。“帅”原本在“词典”的位置是666;因为微调时去掉特殊字符,“帅”在微调的“词典”的位置是888。这个时候,微调训练并预测“帅”这个字,最开始训练并预测的位置极大可能是666,这个时候就是错误的。但是网络中有字符的特征,所以在收敛速度上就比从新训练要快。

shining-love commented 4 years ago

我印象中记得好像也是,不过微调时acc上升的速度要比重新训练上升的速度要快,你可以留意一下这种速度上的差异。对于为啥是从0慢慢的开始上升,我的一个解释是:微调时的“词典”和原本的“词典”不是子集和父集的关系。假设,原本的“词典”是6000个中、英、特殊符号等字符(第一种情况,特殊字符全部都在“词典”的最后面;第二种,特殊字符杂乱分布)。 微调时去掉特殊字符,对于第一种情况,微调就是原训练“词典”的子集,这个情况开始训练的时候,网络预测的位置和真实“字典”的位置是对应,这个时候的准确度应该会从零一下到很高的位置; 第二种情况,它们的词典就不是子集和父集的关系,用一个例子说明。“帅”原本在“词典”的位置是666;因为微调时去掉特殊字符,“帅”在微调的“词典”的位置是888。这个时候,微调训练并预测“帅”这个字,最开始训练并预测的位置极大可能是666,这个时候就是错误的。但是网络中有字符的特征,所以在收敛速度上就比从新训练要快。

感觉很有道理,大佬如果直接基于预训练模型继续训练,不改动原始的词典,我所生成的数字和英文在原始词典中也都有,这样的效果与改动词典相比哪种会更好?

SeventhBlue commented 4 years ago

我印象中记得好像也是,不过微调时acc上升的速度要比重新训练上升的速度要快,你可以留意一下这种速度上的差异。对于为啥是从0慢慢的开始上升,我的一个解释是:微调时的“词典”和原本的“词典”不是子集和父集的关系。假设,原本的“词典”是6000个中、英、特殊符号等字符(第一种情况,特殊字符全部都在“词典”的最后面;第二种,特殊字符杂乱分布)。 微调时去掉特殊字符,对于第一种情况,微调就是原训练“词典”的子集,这个情况开始训练的时候,网络预测的位置和真实“字典”的位置是对应,这个时候的准确度应该会从零一下到很高的位置; 第二种情况,它们的词典就不是子集和父集的关系,用一个例子说明。“帅”原本在“词典”的位置是666;因为微调时去掉特殊字符,“帅”在微调的“词典”的位置是888。这个时候,微调训练并预测“帅”这个字,最开始训练并预测的位置极大可能是666,这个时候就是错误的。但是网络中有字符的特征,所以在收敛速度上就比从新训练要快。

感觉很有道理,大佬如果直接基于预训练模型继续训练,不改动原始的词典,我所生成的数字和英文在原始词典中也都有,这样的效果与改动词典相比哪种会更好?

这个就不知道了,你可以自己试哈,多试就会积累炼丹经验哈。

shining-love commented 4 years ago

我印象中记得好像也是,不过微调时acc上升的速度要比重新训练上升的速度要快,你可以留意一下这种速度上的差异。对于为啥是从0慢慢的开始上升,我的一个解释是:微调时的“词典”和原本的“词典”不是子集和父集的关系。假设,原本的“词典”是6000个中、英、特殊符号等字符(第一种情况,特殊字符全部都在“词典”的最后面;第二种,特殊字符杂乱分布)。 微调时去掉特殊字符,对于第一种情况,微调就是原训练“词典”的子集,这个情况开始训练的时候,网络预测的位置和真实“字典”的位置是对应,这个时候的准确度应该会从零一下到很高的位置; 第二种情况,它们的词典就不是子集和父集的关系,用一个例子说明。“帅”原本在“词典”的位置是666;因为微调时去掉特殊字符,“帅”在微调的“词典”的位置是888。这个时候,微调训练并预测“帅”这个字,最开始训练并预测的位置极大可能是666,这个时候就是错误的。但是网络中有字符的特征,所以在收敛速度上就比从新训练要快。

感觉很有道理,大佬如果直接基于预训练模型继续训练,不改动原始的词典,我所生成的数字和英文在原始词典中也都有,这样的效果与改动词典相比哪种会更好?

这个就不知道了,你可以自己试哈,多试就会积累炼丹经验哈。

好的。谢谢大佬。顺便请问一下我的模拟文本识别数据好像质量不行,训练集精度99%左右,训练集精度89%,明显过拟合了,此外测试了一下其他的图片识别效果极差,只对训练集和验证集里面的样本有较好的识别效果。感觉是我数据质量不够好,不够多样性,不知大佬有什么数据生成的repo?

SeventhBlue commented 4 years ago

我印象中记得好像也是,不过微调时acc上升的速度要比重新训练上升的速度要快,你可以留意一下这种速度上的差异。对于为啥是从0慢慢的开始上升,我的一个解释是:微调时的“词典”和原本的“词典”不是子集和父集的关系。假设,原本的“词典”是6000个中、英、特殊符号等字符(第一种情况,特殊字符全部都在“词典”的最后面;第二种,特殊字符杂乱分布)。 微调时去掉特殊字符,对于第一种情况,微调就是原训练“词典”的子集,这个情况开始训练的时候,网络预测的位置和真实“字典”的位置是对应,这个时候的准确度应该会从零一下到很高的位置; 第二种情况,它们的词典就不是子集和父集的关系,用一个例子说明。“帅”原本在“词典”的位置是666;因为微调时去掉特殊字符,“帅”在微调的“词典”的位置是888。这个时候,微调训练并预测“帅”这个字,最开始训练并预测的位置极大可能是666,这个时候就是错误的。但是网络中有字符的特征,所以在收敛速度上就比从新训练要快。

感觉很有道理,大佬如果直接基于预训练模型继续训练,不改动原始的词典,我所生成的数字和英文在原始词典中也都有,这样的效果与改动词典相比哪种会更好?

这个就不知道了,你可以自己试哈,多试就会积累炼丹经验哈。

好的。谢谢大佬。顺便请问一下我的模拟文本识别数据好像质量不行,训练集精度99%左右,训练集精度89%,明显过拟合了,此外测试了一下其他的图片识别效果极差,只对训练集和验证集里面的样本有较好的识别效果。感觉是我数据质量不够好,不够多样性,不知大佬有什么数据生成的repo?

原项目地址:https://github.com/Sanster/text_renderer

我做的一些功能扩充后项目地址:https://github.com/SeventhBlue/textGenerationTool

对上面项目比较重要文件的介绍:https://blog.csdn.net/qq_31112205/article/details/103653176

shining-love commented 4 years ago

我印象中记得好像也是,不过微调时acc上升的速度要比重新训练上升的速度要快,你可以留意一下这种速度上的差异。对于为啥是从0慢慢的开始上升,我的一个解释是:微调时的“词典”和原本的“词典”不是子集和父集的关系。假设,原本的“词典”是6000个中、英、特殊符号等字符(第一种情况,特殊字符全部都在“词典”的最后面;第二种,特殊字符杂乱分布)。 微调时去掉特殊字符,对于第一种情况,微调就是原训练“词典”的子集,这个情况开始训练的时候,网络预测的位置和真实“字典”的位置是对应,这个时候的准确度应该会从零一下到很高的位置; 第二种情况,它们的词典就不是子集和父集的关系,用一个例子说明。“帅”原本在“词典”的位置是666;因为微调时去掉特殊字符,“帅”在微调的“词典”的位置是888。这个时候,微调训练并预测“帅”这个字,最开始训练并预测的位置极大可能是666,这个时候就是错误的。但是网络中有字符的特征,所以在收敛速度上就比从新训练要快。

感觉很有道理,大佬如果直接基于预训练模型继续训练,不改动原始的词典,我所生成的数字和英文在原始词典中也都有,这样的效果与改动词典相比哪种会更好?

这个就不知道了,你可以自己试哈,多试就会积累炼丹经验哈。

好的。谢谢大佬。顺便请问一下我的模拟文本识别数据好像质量不行,训练集精度99%左右,训练集精度89%,明显过拟合了,此外测试了一下其他的图片识别效果极差,只对训练集和验证集里面的样本有较好的识别效果。感觉是我数据质量不够好,不够多样性,不知大佬有什么数据生成的repo?

原项目地址:https://github.com/Sanster/text_renderer 我做的一些功能扩充后项目地址:https://github.com/SeventhBlue/textGenerationTool 对上面项目比较重要文件的介绍:https://blog.csdn.net/qq_31112205/article/details/103653176

多谢多谢多谢。谢谢热心的老哥

liuziang7 commented 2 years ago

你好大佬,我在微调这个repo以及YCG那个repo时发现一个很奇怪的问题,为什么训练精度acc总是从0开始慢慢往上升,按道理基于预训练模型再训练应该初始精度不为0才对啊,所以感到很奇怪,不知大佬在在再训练(微调)是不是这种情况?我的数据是英文数字组合

您好,我也遇到了同样的问题,我在用自己的数据集在预训练模型基础上做微调的时候,acc总是从0开始,我自己的数据集和原数据集几乎一模一样,label也没问题,字典没有变动,我用自己数据跑denset_predict.py总能预测正确,但用预训练模型微调的时候acc总是从0开始,请问您当时是如何解决的呢