Я столкнулся со специфической проблемой, и мне было интересно, если есть объяснение. Я пытаюсь запустить задачу линейной регрессии и протестировать различные методы оптимизации, и два из них имеют странный результат при сравнении друг с другом. Я строю набор данных, который удовлетворяет y = 2x + 5, и добавляю к нему случайный шум.
xtrain=np.range(0,50,1).reshape(50,1)
ytrain=2*train+5+np.random.normal(0,2,(50,1))
opt1=torch.optim.SGD(model.parameters(),lr=1e-5,momentum=0.8))
opt2=torch.optim.Rprop(model.parameters(),lr=1e-5)
F_loss=F.mse_loss
from torch.utils.data import TensorDataset,DataLoader
train_d=TensorDataset(xtrain,ytrain)
train=DataLoader(train_d,50,shuffle=True)
model1=nn.Linear(1,1)
loss=F_loss(model1(xtrain),ytrain)
def fit(nepoch, model1, F_loss, opt):
for epoch in range(nepoch):
for i,j in train:
predict = model1(i)
loss = F_loss(predict, j)
loss.backward()
opt.step()
opt.zero_grad()
Когда я сравниваю результаты следующих команд:
fit(500000, model1, F_loss, opt1)
fit(500000, model1, F_loss, opt2)
В последнюю эпоху для opt1: потеря = 2,86, вес = 2,02, уклон = 4,46
В последнюю эпоху для opt2: потеря = 3,47, вес = 2,02, уклон = 4,68
Эти результаты не имеют смысла для меня, разве opt2
не должны иметь меньшую потерю, чем opt1
, поскольку найденный им вес и смещение ближе к реальному значению? Метод opt2
находит веса и смещения ближе к реальному значению (они соответственно 2 и 5). Я делаю что-то неправильно?