Python 如何在Torch中培训一系列模型?
我正在尝试训练一系列torch神经网络模型。我之所以使用列表,是因为我希望有任意数量的模型,并且能够遍历列表。我目前正在努力Python 如何在Torch中培训一系列模型?,python,scope,pytorch,torch,Python,Scope,Pytorch,Torch,我正在尝试训练一系列torch神经网络模型。我之所以使用列表,是因为我希望有任意数量的模型,并且能够遍历列表。我目前正在努力 for i in range(len(model_list)): old_model = model_list[i] new_model = train_model(old_model, data) # train_model take a model, trains it, and returns it model_list[i] = ne
for i in range(len(model_list)):
old_model = model_list[i]
new_model = train_model(old_model, data) # train_model take a model, trains it, and returns it
model_list[i] = new_model
但是,我遇到了某种范围问题,因为列表中的模型不更新其参数。我假设这与我正在更新的模型是某种克隆有关,尽管我不明白为什么返回模型没有效果。我的培训代码如下所示:
def train_model(model, data):
model_optimizer = optim.Adam(model.parameters())
model_output = model(data)
model_loss = criterion(model_output, target) # lets just say target we get from data
model_loss.backward()
model_optimizer.step()
return model
我不明白为什么这样的代码不起作用,但是列表中的模型没有更新(在检查它们的系数之后),并且损失没有改变。这是关于模型或其参数的某种范围问题吗?还是有其他问题?谢谢。我猜您当前的train\u模型函数只是计算损失,并更新模型的权重,因为您总是返回模型 因此,我建议您修改此函数,以便在返回模型之前为X时代训练模型 建议代码:
def train_model(model, data):
model_optimizer = optim.Adam(model.parameters())
for epoch in range(EPOCHS):
for data in train_loader:
model.zero_grad()
model_output = model(data)
model_loss = criterion(model_output, target) # lets just say target we get from data
model_loss.backward()
model_optimizer.step()
return model
我猜您当前的train_模型函数只是计算损失,并在一次迭代中更新模型的权重,因为您总是返回模型 因此,我建议您修改此函数,以便在返回模型之前为X时代训练模型 建议代码:
def train_model(model, data):
model_optimizer = optim.Adam(model.parameters())
for epoch in range(EPOCHS):
for data in train_loader:
model.zero_grad()
model_output = model(data)
model_loss = criterion(model_output, target) # lets just say target we get from data
model_loss.backward()
model_optimizer.step()
return model
这似乎是一个不同的用例。在本例中,您缺少了
model\u optimizer.zero\u grad()
。这似乎是一个不同的用例。在本例中,您缺少模型\u优化器.zero\u grad()
。