如何正确地同时训练多个模型火炬

时间:2020-04-18 03:46:59

标签: neural-network pytorch reinforcement-learning

我正在尝试在 pytorch 中实现actor-critic算法。因此,我想拥有两个模型并分别训练它们,即:

actor = Net1()
critic = Net2()

我的代码如下:

optim_a = optim.SGD(actor.paramaters(), lr=.1, momentum=.9)
optim_c = optim.SGD(critic.paramaters(), lr=.1, momentum=.9)
for t in range(hours):
    optim_a.zero_grad()
    optim_c.zero_grad()
    allocation = actor(solar[t], B[t], load_left)
    load = load.detach()
    value = critic(solar[t], B[t], load_left)
    environment_instance = environment(solar[t], B[t], load, G1[t], G2[t])
    R[t], C[t], B[t+1] = environment_instance.step()
    load_left = load_left - allocation
    value_f = critic(solar[t+1], B[t+1], load_left)
    delta = R[t]+gamma*value_f-value
    delta = delta.detach()
    loss_critic = delta*value
    loss_actor = delta*torch.log(allocation)
    loss = loss_actor+loss_critic
    loss.backward()
    optim_a.step()
    optim_c.step()

让我简要解释一下背景(如果有帮助的话)。我正在为使用太阳能的电力系统进行load_assigment。有固定负载和可变负载。环境是运行环境的类,也就是说,我给它一些参数并输出奖励(R)。我用它来定义增量。然后,我定义了两个损耗,其中delta充当常数(不应传播梯度,这就是我分离它的原因)

该代码运行,但优化器未更新权重。奇怪的是,有时他们确实更新了评论家或演员(我不知道为什么),但从未同时更新。我认为这很奇怪,因为我已经看过其他完成此类操作的教程,例如GAN tutorial,但对我不起作用。

如果有人能给我一些指导,我将不胜感激。

0 个答案:

没有答案
相关问题