Я новичок в PyTorch. Я пишу простую программу для линейной регрессии и хочу сравнить результаты, используя разные методы (SGD, импульс, ADAM и т. Д.). Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы каждый раз, когда цикл заканчивался, параметры модели были повторно инициализированы до того же значения, с которого начиналась предыдущая модель, поэтому сравнение является действительным.
Это то, что у меня есть, это мои тренировочные данные:
x1=np.arange(0,10,1).reshape(10,1)
y1=2*x1+1+np.random.normal(0,1,(10,1))
x=torch.from_numpy(x1)
y=torch.from_numpy(y1)
Здесь я тренирую данные
from torch.utils.data import TensorDataset,DataLoader
train=TensorDataset(xdata,ydata)
size_batch=10
dl=DataLoader(train,size_batch,shuffle=True)
Определите модель и выберите
model=nn.Linear(1,1)
opt=torch.optim.SGD(model.parameters(), lr=1e-4)
import torch.nn.functional as F
loss1=F.mse_loss
loss=loss1(model(x),y)
Функция
def fitmodel(nepochs, model, loss1, opt):
for epoch in range(nepochs):
for xm,ym in dl:
predict = model(xm)
loss = loss1(predict, ym)
loss.backward()
opt.step()
opt.zero_grad()
вызов функции
fitmodel(1000,model,loss1,opt)
Теперь я хочу повторить вышеописанное, но для других алгоритмов оптимизации. Если я просто перезапущу fitmodel, он будет использовать некоторые параметры, которые он уже рассчитал. Я хочу начать с тех же «начальных условий», что и при предыдущем запуске. У кого-нибудь есть идеи, как это сделать?
Редактировать
Перед запуском fitmodel я копирую исходное смещение и вес
w1=model.weight
b1=model.bias
fitmodel(1000,model,loss1,opt)
model.weight=w1
model.bias=b1
loss=[]
Но я получаю эту ошибку:
Ошибка типа: невозможно присвоить «список» в качестве параметра «смещение» (torch.nn.Parameter или None ожидается)