【问题标题】:Pytorch: weights not updatingPytorch:权重没有更新
【发布时间】:2020-05-18 13:25:04
【问题描述】:

我正在尝试训练一个模型,但它不起作用,因为当我调用以下命令时权重没有更新:

self.optimizer = Adam(self.PPO.parameters(), lr=0.1, eps=epsilon)
total_loss = Variable(policy_loss + 0.5*value_loss - entropy_loss.mean() * 0.01, requires_grad=True)

self.optimizer.zero_grad()
(total_loss * 10).backward()
self.optimizer.step()

当我打印权重时,它们都是相同的(损失不为零,学习率设置为 0.1),当我比较它们时(即使在每个参数上调用 clone())它总是返回 True . Total loss 也有 grad_fn 属性...优化器是在我的代理类的构造函数中创建的。

我的代码基于此存储库: https://github.com/andreiliphd/tennis-ppo/blob/master/agent.py

这是我的代理构造函数:

    def __init__(self, PPO, learning_rate, epsilon, discount_rate, entropy_coefficient, ppo_clip, gradient_clip,
                 rollout_length, tau):
        self.PPO = PPO
        self.learning_rate = learning_rate
        self.epsilon = epsilon
        self.discount_rate = discount_rate
        self.entropy_coefficient = entropy_coefficient
        self.ppo_clip = 0.2
        self.gradient_clip = 5
        self.rollout_length = rollout_length
        self.tau = tau
        self.optimizer = Adam(self.PPO.actor.parameters(), lr=0.1, eps=epsilon)
        self.device = torch.device('cpu')

这是我的 PPO 类,它创建了两个具有前向功能的网络和一些隐藏层

class PPO(nn.Module):

    def __init__(self, state_shape, action_num, mlp_layers, device=torch.device('cpu')):
        super(PPO, self).__init__()
        self.state_shape = state_shape
        self.action_num = action_num
        self.mlp_layers = mlp_layers
        self.device = torch.device('cpu')

        layer_dims = [np.prod(self.state_shape)] + self.mlp_layers
        self.actor = PPO_Network(state_shape, action_num, layer_dims, True)
        self.actor = self.actor.to(device)
        self.critic = PPO_Network(state_shape, 1, layer_dims, False)
        self.critic = self.critic.to(device)
        self.to(device)

非常欢迎任何关于为什么会发生这种情况的迹象,以及我所忽略的内容。 :) 如果需要,我可以提供更多信息或代码。

【问题讨论】:

    标签: python pytorch gradient


    【解决方案1】:

    我修复了这个:) 这很愚蠢,因为我将网络返回的值之一转换为 numpy,然后将其转换回张量。由于一些乱七八糟的代码,我花了一段时间才意识到。

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2018-12-08
      • 1970-01-01
      • 2019-04-09
      • 2019-05-06
      • 1970-01-01
      • 2019-11-24
      • 2019-08-10
      • 2019-06-24
      相关资源
      最近更新 更多