如何在Torch中训练模型列表?

时间:2020-07-31 16:57:33

标签: python scope pytorch 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] = 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

我不明白为什么这样的代码行不通,但是列表中的模型没有更新(检查它们的系数后),损失也没有改变。关于模型或其参数是否存在某种范围问题?还是还有其他问题?谢谢。

1 个答案:

答案 0 :(得分:0)

我猜您当前的train_model函数仅在一次迭代中计算损失并更新模型的权重,因为您总是返回模型。

因此,我建议您修改此功能,以便在返回模型之前训练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