save - 为什么我的网络在没有我调用优化器的情况下发生变化?
问题描述
我在强化学习程序中有一个网络,它可以自我对抗并更新以改善估值和政策。如果游戏是平局或超过阈值,则游戏将被淘汰,并且永远不会计算损失并且永远不会调用优化器。尽管如此,即使它没有更新,它仍然可以保存网络。它执行此操作并使用这些函数加载数据
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}
解决方案
推荐阅读
- c# - 如何使用 EF6 在 C# 中实现 UOW
- multithreading - 如何安全地选择一些可能同时关闭的渠道?
- php - 用 2 个参数编写了 mod_rewrite,但 URL 不断堆叠
- listview - 如何在 Flutter 中生成“ColumnList”
- adsense - 使用 Cloudflare 后,Google 广告不会显示
- python - 使用 matplotlib 在 python 中打开图像
- vue.js - Nuxt Auth - 隐藏 client_secret
- kotlin - Kotlin:可迭代
从序列 - react-native - React Native - 我可以设置动态初始状态吗?
- android - Android 找不到 multidex-1.0.3.pom 的资源