首页 > 解决方案 > 为什么我的网络在没有我调用优化器的情况下发生变化?

问题描述

我在强化学习程序中有一个网络,它可以自我对抗并更新以改善估值和政策。如果游戏是平局或超过阈值,则游戏将被淘汰,并且永远不会计算损失并且永远不会调用优化器。尽管如此,即使它没有更新,它仍然可以保存网络。它执行此操作并使用这些函数加载数据

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 的输出,比如说,中间没有更新,我会得到一个稍微不同的结果。按小数点后 4 位的顺序。我不知道为什么。除了我积极的培训之外,这里没有发生只有这样的电话

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}

标签: savepytorch

解决方案


推荐阅读