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

微调问题 #4

Open
shining-love opened this issue Jun 30, 2020 · 7 comments
Open

微调问题 #4

shining-love opened this issue Jun 30, 2020 · 7 comments

Comments

@shining-love
Copy link

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

@SeventhBlue
Copy link
Owner

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

@shining-love
Copy link
Author

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

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

@SeventhBlue
Copy link
Owner

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

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

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

@shining-love
Copy link
Author

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

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

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

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

@SeventhBlue
Copy link
Owner

我印象中记得好像也是,不过微调时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
Copy link
Author

我印象中记得好像也是,不过微调时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
Copy link

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

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

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