为什么我的 RL 模型在加载到 pytorch 中后表现不一样?

问题描述 投票:0回答:2

我正在 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())
)当我保存模型和再次加载模型时,权重和偏差实际上是相同的。

可能发生什么事?网络中是否还有其他内容可能无法以某种方式保存?

pytorch reinforcement-learning
2个回答
0
投票

Dropout 和其他一些层在

eval
train
模式下的行为有所不同。您可以通过
model.train()
model.eval()
在这些之间切换。

我记得读到过,强化学习通常会遭遇脆弱的学习,即使稍微改变输入也会导致性能截然不同。举个例子,当在 Atari 游戏上训练算法时,只需将屏幕向右移动一个像素,网络就会失去所有性能增益。

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


0
投票

确保在推理中,在使用训练模型的知识之前,您不会在特定的运行时间中使用随机性。您应该直接使用经过训练的模型的知识。

© www.soinside.com 2019 - 2024. All rights reserved.