同样的随机种子,前几次可以复现,但昨天突然就复现不了了。
可以按照以下步骤检查一下:
1.首先检查各种设置,如batch size , learning rate、优化器等等。
如果以上各种设置都没问题那么问题极大概率还是出在模型里面了。
2.然后如果使用的是pytoch框架的话可以检查forwad()函数中模型整体的网路结构和以前是否一样(不能有一丝偏差)。
3.最后检查在forwad()中使用的模块、层在__init__()中是否有偏差。在这里需要特别注意一个问题,我的问题就是出现在这里。因为我昨天在__init__()中额外定义了一个层,但这个层并没有用到我现有的网络结构中,所以并没有在意它,没有把它注释掉,但就是因为这个小问题导致结果不能复现。因为一个固定的随机种子就固定了一种初始化的随机性,初始化是在__init__()函数中进行的,而这里面突然多了一层,虽然它没有影响到我的网络结构,但是网络会对其进行初始化从而打乱了后面一些层的初始化,使得虽然使用了同一个随机种子但是同一网络进行了不同的初始化从而使得结果不同。解决方法是注释掉这多余的一层或者可以放到if语句中。
当然在改动代码前最好对原有代码进行,因为总是会有稀奇古怪的的东西影响到随机性。例如后来我在main函数中使用了torchsummary.summary(net, input_size=(3, 256, 256), batch_size=4)来输出模型的一些东西,后来发现使用随机种子复现不了结果了,找了半天才找到是这里的问题。