我喜欢使用割炬,因为它非常容易监视和调试参数,但是我总是遇到割炬回归问题
class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden)
self.predict = torch.nn.Linear(n_hidden, n_output)
def forward(self, x):
x = F.relu(self.hidden(x))
x = self.predict(x)
return x
这是一个简单的网络,每当我尝试使用如下数据进行训练时
import sklearn.datasets as datasets
X_,y_=datasets.make_regression(n_samples=500,n_features=2,noise=0.1)
X = torch.from_numpy(X_).float()
y = torch.from_numpy(y_).float()
net = Net(n_feature=2, n_hidden=10, n_output=1)
print(net)
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()
for t in range(2000):
prediction = net(X)
loss = loss_func(prediction, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if t % 5 == 0:
print(loss.data.numpy())
我尝试调整超参数,例如节点数和学习率,并尝试更改优化器和损失函数,但看起来并没有太大的改进。 上面的代码中是否存在任何问题,或者有人在火炬回归上也度过了艰难的时光?