[英]How does one train a list of models in 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] = new_model
但是我遇到了某種 scope 問題,因為列表中的模型不會更新它們的參數。 我認為它與 model 我正在更新是某種克隆有關,但我不明白為什么返回 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
我不明白為什么這樣的代碼不起作用,但是列表中的模型沒有更新(在檢查了它們的系數之后),並且損失沒有改變。 這是關於模型或其參數的某種 scope 問題嗎? 還是有其他問題? 謝謝。
我猜您當前的 train_model function 僅計算損失並更新模型的權重僅進行一次迭代,因為您始終返回 model。
因此,我建議您修改此 function 以便在返回 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.