【发布时间】:2020-11-29 15:51:24
【问题描述】:
我正在学习如何使用 PyTorch 构建神经网络。 这个公式是我的代码的目标: y =2X^3 + 7X^2 - 8*X + 120
这是一个回归问题。
我使用它是因为它很简单,并且可以计算输出,这样我就可以确保我的神经网络能够使用给定的输入预测输出。
但是,我在训练过程中遇到了一些问题。 问题出现在这行代码:
loss = loss_func(prediction, outputs)
在这一行中计算的损失是 NAN(不是数字)
我使用 MSEloss 作为损失函数。 100 个数据集用于训练 ANN 模型。输入 X_train 的范围是 -1000 到 1000。
我认为问题出在 X_train 和 MSEloss 的值上。 X_train 应该缩放到 0 到 1 之间的一些值,以便 MSEloss 可以计算损失。
但是,在回归问题中,是否可以在不将输入缩放为 0 到 1 之间的值的情况下训练 ANN 模型?
这是我的代码,它不使用 MinMaxScaler,而是使用 NAN 打印损失:
import torch
import torch.nn as nn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import torch.nn.functional as F
from torch.autograd import Variable
#Load datasets
dataset = pd.read_csv('test_100.csv')
x_temp_train = dataset.iloc[:79, :-1].values
y_temp_train = dataset.iloc[:79, -1:].values
x_temp_test = dataset.iloc[80:, :-1].values
y_temp_test = dataset.iloc[80:, -1:].values
#Turn into tensor
X_train = torch.FloatTensor(x_temp_train)
Y_train = torch.FloatTensor(y_temp_train)
X_test = torch.FloatTensor(x_temp_test)
Y_test = torch.FloatTensor(y_temp_test)
#Define a Artifical Neural Network
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.linear = nn.Linear(1,1) #input=1, output=1, bias=True
def forward(self, x):
x = self.linear(x)
return x
net = Net()
print(net)
#Define a Loss function and optimizer
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()
#Training
inputs = Variable(X_train)
outputs = Variable(Y_train)
for i in range(100): #epoch=100
prediction = net(inputs)
loss = loss_func(prediction, outputs)
optimizer.zero_grad() #zero the parameter gradients
loss.backward() #compute gradients(dloss/dx)
optimizer.step() #updates the parameters
if i % 10 == 9: #print every 10 mini-batches
#plot and show learning process
plt.cla()
plt.scatter(X_train.data.numpy(), Y_train.data.numpy())
plt.plot(X_train.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})
plt.pause(0.1)
plt.show()
感谢您的宝贵时间。
【问题讨论】:
标签: python neural-network pytorch