我正在学习“深度强化学习”,并在pytorch的REINFORCEMENT LEARNING(DQN)教程之后建立自己的示例。
我正在执行演员的策略,如下所示: 1. model.eval() 2.从模型中获得最佳行动 3. self.net.train()
问题是: 在eval()和train()模式之间来回切换是否会对优化过程造成损害?
该模型仅包含Linear和BatchNorm1d图层。 据我所知,使用BatchNorm1d时必须执行model.eval()才能使用模型,因为eval()和train()模式会有不同的结果。
训练分类神经网络时,仅在训练完成后才执行model.eval(),但在“深度强化学习”的情况下,通常使用策略,然后继续进行优化过程。
我想知道在模式之间来回对优化过程是否“无害”?
def strategy(self, state):
# Explore or Exploit
if self.epsilon > random():
action = choice(self.actions)
else:
self.net.eval()
action = self.net(state.unsqueeze(0)).max(1)[1].detach()
self.net.train()
答案 0 :(得分:0)
eval()
将模型置于评估模式。
在评估模式下,辍学层仅充当“直通”层。
在训练期间,BatchNorm
层会对其计算的均值和方差进行连续估算。行驶总和保持默认动量0.1。在评估过程中,此运行平均值/方差用于标准化。
因此,在eval()
和train()
模式之间来回切换不会对优化过程造成任何损害。