请教: 同一份 Tensorflow 代码,训练新闻自动分类, Windows 和 Linux 下的训练结果不一致?

2019-01-12 21:44:49 +08:00
 suley

我是参考这位兄弟的文章练习的,只不过我的环境换成了 Ubuntu,

https://www.jianshu.com/p/db8824205fc3

根据这位博主的测试,第一千步就差不多能达到 90%准确率。

step:100 loss:1.5357 accuracy:0.4900
step:200 loss:1.0189 accuracy:0.7000
step:300 loss:0.7720 accuracy:0.7850
step:400 loss:0.6589 accuracy:0.8000
step:500 loss:0.4987 accuracy:0.8300
step:600 loss:0.5863 accuracy:0.8100
step:700 loss:0.5242 accuracy:0.8350
step:800 loss:0.3541 accuracy:0.9000
step:900 loss:0.5004 accuracy:0.8700
step:1000 loss:0.3152 accuracy:0.9050

可是我训练了差不多一百万步,始终在 0.3~0.4 徘徊,不收敛,里面有些大小写的错误我都修正了,还是不得要领。

我的训练结果:

step:100 loss:2.2414 accuracy:0.2250 used time: 3 s
step:200 loss:2.0146 accuracy:0.3450 used time: 7 s
step:300 loss:1.9829 accuracy:0.2900 used time: 11 s
step:400 loss:1.8127 accuracy:0.3350 used time: 15 s
step:500 loss:1.9361 accuracy:0.3150 used time: 19 s
step:600 loss:1.8108 accuracy:0.3300 used time: 23 s
step:700 loss:1.7482 accuracy:0.3950 used time: 27 s
step:800 loss:1.7227 accuracy:0.3200 used time: 31 s
step:900 loss:1.7529 accuracy:0.3500 used time: 35 s
step:1000 loss:1.7124 accuracy:0.3300 used time: 38 s
step:1100 loss:1.7832 accuracy:0.3350 used time: 42 s
step:1200 loss:1.7278 accuracy:0.3500 used time: 46 s
step:1300 loss:1.6402 accuracy:0.3000 used time: 50 s
step:1400 loss:1.6699 accuracy:0.3200 used time: 54 s
step:1500 loss:1.6819 accuracy:0.3600 used time: 59 s
step:1600 loss:1.7417 accuracy:0.3400 used time: 63 s
step:1700 loss:1.7227 accuracy:0.3350 used time: 67 s
step:1800 loss:1.6762 accuracy:0.3850 used time: 71 s
step:1900 loss:1.6828 accuracy:0.3150 used time: 75 s
step:2000 loss:1.6694 accuracy:0.2900 used time: 79 s
step:2100 loss:1.6974 accuracy:0.2950 used time: 83 s
step:2200 loss:1.6517 accuracy:0.3450 used time: 87 s
step:2300 loss:1.6009 accuracy:0.3600 used time: 91 s
step:2400 loss:1.7358 accuracy:0.3300 used time: 95 s
step:2500 loss:1.7149 accuracy:0.3500 used time: 99 s
step:2600 loss:1.6166 accuracy:0.3850 used time: 103 s
step:2700 loss:1.6242 accuracy:0.3500 used time: 107 s
step:2800 loss:1.6648 accuracy:0.3550 used time: 111 s
step:2900 loss:1.6295 accuracy:0.3050 used time: 115 s
step:3000 loss:1.6616 accuracy:0.3400 used time: 119 s

联系了博主,博主表示检查了很久也不知道为什么会这样。而且同一篇文章下也有其它网友说遇到了同样的问题。

请教下各位大神~先谢过了。

9023 次点击
所在节点    TensorFlow
39 条回复
Machard
2019-01-12 21:49:09 +08:00
有可能是 TensorFlow 版本的问题,记得 1.2 版本之后有很大的差别。
suley
2019-01-12 21:52:29 +08:00
@Machard 感谢,我查查看 1.2 版本前后有什么差别;这个代码原理很简单,光从代码上我看不出来版本的差异会有什么影响~
SorryChen
2019-01-12 22:00:57 +08:00
learning rate 呢?
suley
2019-01-12 22:02:06 +08:00
@Machard 看了下这个博主和我的版本,他是 1.6,我是 1.12 ,感觉并无差别
suley
2019-01-12 22:05:04 +08:00
@SorryChen 学习率是 1e-3,我设置大点试试,谢谢~
SorryChen
2019-01-12 22:07:52 +08:00
@suley 如果你要复现他的结果,你得保证 学习率,预训练模型,参数初始化方法,优化器类型,等等全都一样,才能复现的差不多
suley
2019-01-12 22:12:34 +08:00
@SorryChen 问题就是:和博主用一样的代码、一样的参数,但是得不到一样的结果,而且此问题不是我独有,文章下面也有其它人评论有同样的问题,所以很奇怪。
abcbuzhiming
2019-01-12 22:15:05 +08:00
@suley 差 6 个版本说“感觉并无差别”,兄弟你真的是搞计算机的吗?
Machard
2019-01-12 22:15:20 +08:00
TensorFlow 版本之间的差异。最好保证 TensorFlow 版本一致的情况下进行复现。
suley
2019-01-12 22:21:11 +08:00
@abcbuzhiming

都属于 1.x,按理说是这样正常兼容的,除非是 1.x->2.x 这样的跳跃……

我去查了 1.6~1.12 的 release note,并没有提及版本的不同会导致模型产生那么大的执行差异;如果有,应该会提及吧……

而且我的是高版本 tf,一般高版本的程序都能向后兼容,这也是常识; tensorflow 的官方 models 也不见得会跟着 tf 的版本升级而更新,但是还是能正常使用。
iConnect
2019-01-12 22:21:57 +08:00
只看代码难复现你的效果,要从头跑一遍这个训练过程才能知道问题所在,遇到过版本问题,还没遇到过操作系统的问题
suley
2019-01-12 22:23:51 +08:00
@iConnect 已经是从头开始跑了,作者也没提供训练好的 model 啊……
suley
2019-01-12 22:24:42 +08:00
我先降级到 1.6 试试……
geekvcn
2019-01-12 22:24:58 +08:00
脾气倔就不要问问题,自己研究,改下版本不减寿吧?
iConnect
2019-01-12 22:37:17 +08:00
看了一下代码,没时间从头跑,作者训练的 model 参数都标明了啊,你指的作者没有提供训练好的 model,是指哪个?

你要是降级了还是到不了 90%,我周一用公司的机器跑一下,家里的性能不够比较耗时
jingous
2019-01-12 22:39:58 +08:00
@suley tensorflow 高版本不一定兼容低版本
Ediacaran
2019-01-12 22:43:06 +08:00
外行,不过见过有的训练代码是提供随机数种子的
suley
2019-01-12 22:45:06 +08:00
@geekvcn 谢谢指教,已经在降级了,看我上一篇回复,但是从头开始处理数据到训练结束估计也要半小时,所以一边讨论,一边跑训练试试;对这个问题比较不解,希望能搞清楚,如果有人知道详细原因更好,这样也能为后来人趟坑~
jingous
2019-01-12 22:45:52 +08:00
@suley 最直观的就是 tf.contrib 的包,一些计算细节也会更改。具体看官方文档,建议你先更改到 1.6 版本试一试。https://www.tensorflow.org/guide/version_compat
suley
2019-01-12 22:50:14 +08:00
@iConnect 我指的是作者没有提供用 Saver 保存好的模型。抱歉可能不太理解你的意思。我是参照作者的代码和参数从头开始处理数据、训练模型的,不知道这算不算“从头跑一遍这个训练过程”?
我正在降级测试~实在不行再麻烦兄弟你帮忙试一下。谢了~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX