我在同一个python版本上运行一个卷积神经网络脚本,使用anaconda发行版(Python 2.7.12 :: Anaconda 4.2.0(64位))在完全相同的数据集上,在两台不同的机器上运行:
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1- noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: RedHatEnterpriseWorkstation
Description: Red Hat Enterprise Linux Workstation release 7.3 (Maipo)
Release: 7.3
和
Distributor ID: Ubuntu
Description: Ubuntu 16.10
Release: 16.10
在我使用pip install tensorflow
(v0.12)安装了tensorflow的两台机器中,在此之前我运行了conda update --all
以确保我拥有相同版本的所有软件包。
这里有趣的部分开始了。仅在RedHat mahcine上,ADAM优化器收敛(我预测神经元的3d位置,在大约500个时期内它低于10um,验证集上验证的最终准确度约为5um)。激动相同的代码和完全相同的数据(克隆来自git) Ubuntu机器给出了更糟糕的结果:经过500次迭代后,误差仍然在48微米左右(起始'随机'精度为69微米),验证集的最终精度约为56um。
现在,我检查了数据是否完全相同,它们使用相同的随机种子进行混洗,并且训练和验证集是相同的。它似乎只是ADAM优化器(或其他)也不会聚合在Ubuntu系统上,而它很容易收敛于Redhat系统。
这是第一次迭代:
RedHat的
step 0 , training accuracy 81.1025
step 50 , training accuracy 30.0194
step 100 , training accuracy 25.263
step 150 , training accuracy 19.4822
step 200 , training accuracy 12.0292
step 250 , training accuracy 8.85796
step 300 , training accuracy 7.88442
step 350 , training accuracy 7.20183
step 400 , training accuracy 7.10236
step 450 , training accuracy 6.14335
step 500 , training accuracy 6.20344
Ubuntu的
step 0 , training accuracy 69.9108
step 50 , training accuracy 57.8822
step 100 , training accuracy 56.905
step 150 , training accuracy 54.9463
step 200 , training accuracy 53.7637
step 250 , training accuracy 53.3795
step 300 , training accuracy 50.9828
step 350 , training accuracy 50.4627
step 400 , training accuracy 48.7606
step 450 , training accuracy 47.8309
step 500 , training accuracy 47.8226
在Redhat机器上,CNN也使用其他优化器收敛。我在安装了相同的Redhat版本的另一台机器上以及在Ubuntu 16.04上尝试了相同的代码和相同的数据,我得到了相同的奇怪结果:在Redhat上正常工作,而不是在Ubuntu上聚合。
我不知道我得到的结果是如此不同,因为我检查了所有已安装的软件包版本是否相同。