为什么在没有调用优化器的情况下我的网络会发生变化?

时间:2019-05-08 06:45:01

标签: save pytorch

我在强化学习计划中拥有一个网络,该网络可以与自己竞争并进行更新以改善评估和政策。如果游戏是平局或超过阈值,则将游戏抛出,并且永远不会计算损失,也不会调用优化程序。即使它没有更新,它仍然可以节省网络。它会执行此操作并使用这些功能加载数据

def load_net(i):
    if not os.path.exists('C:\\Users\\user\\Desktop\\python\\refactor\\nets\\net{}.pth'.format(i)):
        return None
    nn = net.Net()
    nn.load_state_dict(torch.load('C:\\Users\\user\\Desktop\\python\\refactor\\nets\\net{}.pth'.format(i)))
    nn.double()
    nn.train()
    print('loaded net {}'.format(i))
    return nn


def load_latest_net():
    i = 0
    while os.path.exists('C:\\Users\\user\\Desktop\\python\\refactor\\nets\\net{}.pth'.format(i)):
        i += 1
    i -= 1
    nn = net.Net()
    nn.load_state_dict(torch.load('C:\\Users\\user\\Desktop\\python\\refactor\\nets\\net{}.pth'.format(i)))
    nn.double()
    nn.train()
    print('loaded latest net {}'.format(i))
    return nn

def save_net_as_latest(net):
    i = 0
    while os.path.exists('C:\\Users\\user\\Desktop\\python\\refactor\\nets\\net{}.pth'.format(i)):
        i += 1
    print('saving net as {}'.format(i))
    torch.save(net.state_dict(), 'C:\\Users\\user\\Desktop\\python\\refactor\\nets\\net{}.pth'.format(i))

如果我比较网络18和19的输出,例如,它们之间没有更新,我会得到一个略微的结果。按小数点后四位的顺序排列。我不知道为什么。除了这里没有进行即时培训的培训外,只有

这样的电话
output = model(input)

我可能有一些多余或不必要的.double()调用。否则我很困惑。这是一些输出,显示了我正在谈论的内容

loaded net 31
loaded net 24
0.03457238742588508
{(256, 0): 0.1320085660843816, (256, 1): 0.137342432039808, (16384, 0): 0.17418085554435797, (16384, 1): 0.10271324890344476, (1048576, 0): 0.19074605973319944, (1048576, 1): 0.16643130291875174, (67108864, 0): 0.09657753477605639}
-0.04351635692025382
{(256, 0): 0.12781107650911216, (256, 1): 0.1366737843176031, (16384, 0): 0.17335968033226215, (16384, 1): 0.10237753363808048, (1048576, 0): 0.19300295476929272, (1048576, 1): 0.1690421767620045, (67108864, 0): 0.09773279367164493}

0 个答案:

没有答案