首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >毕火炬在每次训练后恢复训练。

毕火炬在每次训练后恢复训练。
EN

Stack Overflow用户
提问于 2019-02-21 13:20:18
回答 2查看 234关注 0票数 3

我有一个数据集,该数据集被划分为较小的数据集。

我想为数据集的每个分区训练3个模型,但我需要所有的培训课程从相同的初始化网络参数开始。

看起来是这样的:

代码语言:javascript
复制
modelList = []
thisCNN = NNet()

for x in range(3):
    train = torch.utils.data.DataLoader(Subset(train_set, indexes[x]), batch_size=32)
    bb = trainMyNet(thisCNN, train, test)
    modelList.append(list(bb.parameters()))

print modelList[0][1]
print modelList[1][1]
print modelList[2][1]

在打印过程中,对于每个保存的模型,我都得到了相同的精确参数,这是很奇怪的,而且我还注意到,每次迭代之后,该模型实际上恢复了以前迭代中的训练,因为它会降低每次迭代的损失。

我想要实现的是,每次迭代在当前子集x上得到一个新的模型,但是训练应该从相同的初始thisCNN = NNet()权重开始。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-21 13:32:31

当您调用bb = trainMyNet(thisCNN, train, test)时,您不会获取thisCNN的副本,但它与每次迭代中更新的模型相同。为了使您的代码正常工作,您可能应该传递该模型的副本:

代码语言:javascript
复制
from copy import deepcopy    
modelList = []
thisCNN = NNet()

for x in range(3):
    train = torch.utils.data.DataLoader(Subset(train_set, indexes[x]), batch_size=32)
    bb = trainMyNet(deepcopy(thisCNN), train, test)
    modelList.append(list(bb.parameters()))

print modelList[0][1]
print modelList[1][1]
print modelList[2][1]

这应该初始化所有模型为thisCNN,并确保它们在培训后是不同的。

票数 1
EN

Stack Overflow用户

发布于 2019-02-21 13:30:29

每次您将thisCNN传递给trainMyNet时,您都是在传递同一个网络。因此,权重将在同一地点更新。您应该在for循环中声明thisCNN

代码语言:javascript
复制
for x in range(3):
    thisCNN = NNet()
    train = torch.utils.data.DataLoader(Subset(train_set, indexes[x]), batch_size=32)
    bb = trainMyNet(thisCNN, train, test)
    modelList.append(list(bb.parameters()))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54808117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档