【发布时间】:2021-05-04 03:56:22
【问题描述】:
我正在尝试从波士顿数据集进行线性回归。自第一次迭代以来,MSE 损失函数为 nan。我尝试改变学习率和 batch_size 但没有用。
from torch.utils.data import TensorDataset , DataLoader
inputs = torch.from_numpy(Features).to(torch.float32)
targets = torch.from_numpy(target).to(torch.float32)
train_ds = TensorDataset(inputs , targets)
train_dl = DataLoader(train_ds , batch_size = 5 , shuffle = True)
model = nn.Linear(13,1)
opt = optim.SGD(model.parameters(), lr=1e-5)
loss_fn = F.mse_loss
def fit(num_epochs, model, loss_fn, opt, train_dl):
# Repeat for given number of epochs
for epoch in range(num_epochs):
# Train with batches of data
for xb,yb in train_dl:
# 1. Generate predictions
pred = model(xb)
# 2. Calculate loss
loss = loss_fn(pred, yb)
# 3. Compute gradients
loss.backward()
# 4. Update parameters using gradients
opt.step()
# 5. Reset the gradients to zero
opt.zero_grad()
# Print the progress
if (epoch+1) % 10 == 0:
print('Epoch [{}/{}], Loss: {}'.format(epoch+1, num_epochs, loss.item()))
fit(100, model, loss_fn , opt , train_dl)
【问题讨论】:
-
乍一看,似乎是数据集(即Features)或模型初始化的问题。为了确定这一点,请将学习率设置为 0 或在每一步打印模型的预测。我想预测是 nan,因此损失变成 nan(不是相反)。
-
首先,使用 nn.MSELoss 而不是 F.mse_loss(但我认为这不会产生影响)。其次,每 epoch 打印一次损失而不是每 10 次打印一次损失,也许一开始损失是一个数字。还要打印预测,这更重要。而且由于我们不知道您的数据是什么,因此很难提供进一步的帮助