在装入pytorch后,为什么我的RL模型没有相同的表现?

时间:2018-10-03 17:06:33

标签: pytorch reinforcement-learning

我正在为Pytorch的强化学习训练一些简单的神经网络。在训练结束时,我将模型保存为:

torch.save(self.policy_NN.state_dict(), self.model_fname)

在这一点上,它做得很好。然后,在另一个脚本中,我再次加载它,如下所示:

self.policy_NN.load_state_dict(torch.load(model_fname))

然后播放一段情节,就像训练从未停止一样(除非我不再进行DQN学习,而是在每一点上都采取贪婪的行动)。因此,我希望它的行为基本上与保存它时的行为相同。

但是,每当我加载它时,它的行为都完全不同,以至于在保存之前似乎根本没有学过。例如,如果我查看培训课程的最后1000个时间步,它将获得很多奖励,但是在加载之后,基本上没有任何奖励。

我已经验证(通过执行print(self.policy_NN.state_dict())),在保存模型和再次加载模型时,权重和偏差实际上是相同的。

可能会发生什么?网络上还有其他可能无法以某种方式保存的东西吗?

1 个答案:

答案 0 :(得分:0)

evaltrain模式下,下降层和其他一些层的行为不同。您可以在model.train()model.eval()之间进行切换。

我记得读过RL通常会受到脆性学习的困扰,在该学习中,即使稍微改变输入也会导致性能大不相同。该示例是在Atari游戏上训练算法时,仅通过将屏幕右移一个像素就可以使网络失去所有性能提升。

您可能希望检查两种模式下您的环境的行为是否相似。