Pytorch - 在 eval() 和 train() 模式之间来回切换
Pytorch - going back and forth between eval() and train() modes
我正在学习 "Deep Reinforcement Learning" 并在 pytorch 的强化学习 (DQN) 教程之后构建我自己的示例。
我按如下方式实施演员的策略:
1. model.eval()
2. 从模型中获得最佳动作
3. self.net.train()
问题是:
在 eval() 和 train() 模式之间来回切换是否会对优化过程造成任何损害?
该模型仅包含 Linear 和 BatchNorm1d 层。
据我所知,在使用 BatchNorm1d 时必须执行 model.eval() 才能使用模型,因为 eval() 和 train() 模式的结果不同。
在训练分类神经网络时,model.eval() 仅在训练完成后执行,但在 "Deep Reinforcement Learning" 的情况下,通常使用策略,然后继续优化过程。
我想知道在模式之间来回切换是否 "harmless" 优化过程?
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()
eval()
将模型置于评估模式。
在评估模式下,Dropout层只是作为一个"passthrough"层。
在训练期间,BatchNorm
层对其计算的均值和方差保持 运行 估计。 运行 总和保持默认动量 0.1。求值的时候,这个运行mean/variance是用来归一化的
因此,在 eval()
和 train()
模式之间来回切换不会对优化过程造成任何损害。
我正在学习 "Deep Reinforcement Learning" 并在 pytorch 的强化学习 (DQN) 教程之后构建我自己的示例。
我按如下方式实施演员的策略: 1. model.eval() 2. 从模型中获得最佳动作 3. self.net.train()
问题是: 在 eval() 和 train() 模式之间来回切换是否会对优化过程造成任何损害?
该模型仅包含 Linear 和 BatchNorm1d 层。 据我所知,在使用 BatchNorm1d 时必须执行 model.eval() 才能使用模型,因为 eval() 和 train() 模式的结果不同。
在训练分类神经网络时,model.eval() 仅在训练完成后执行,但在 "Deep Reinforcement Learning" 的情况下,通常使用策略,然后继续优化过程。
我想知道在模式之间来回切换是否 "harmless" 优化过程?
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()
eval()
将模型置于评估模式。
在评估模式下,Dropout层只是作为一个"passthrough"层。
在训练期间,
BatchNorm
层对其计算的均值和方差保持 运行 估计。 运行 总和保持默认动量 0.1。求值的时候,这个运行mean/variance是用来归一化的
因此,在 eval()
和 train()
模式之间来回切换不会对优化过程造成任何损害。