Pytorch-在eval()和train()模式之间来回切换

时间:2019-10-18 09:26:21

标签: python neural-network deep-learning pytorch reinforcement-learning

我正在学习“深度强化学习”,并在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()

1 个答案:

答案 0 :(得分:0)

eval()将模型置于评估模式。

  1. 在评估模式下,辍学层仅充当“直通”层。

  2. 在训练期间,BatchNorm层会对其计算的均值和方差进行连续估算。行驶总和保持默认动量0.1。在评估过程中,此运行平均值/方差用于标准化。

因此,在eval()train()模式之间来回切换不会对优化过程造成任何损害。