Deep learning Pyrotch完全连接的前馈网络用于回归问题-对所有输入给出相同的结果

Deep learning Pyrotch完全连接的前馈网络用于回归问题-对所有输入给出相同的结果,deep-learning,regression,pytorch,Deep Learning,Regression,Pytorch,我在Pytorch中为一个简单的回归问题(w1x1+w2x2+w3x3=y)建立了一个神经网络模型,其中我为训练数据生成了2000条记录,其中x1、x2、x3和W1=4、W2=6、W3=2的随机值。我创建了一个包含20条记录的测试数据集,其中只有x1、x2、x3的值,我希望得到的结果是,但是,该模型为所有20个输入行返回相同的值。我不知道问题在哪里。下面是代码片段 inputs = df[['x1', 'x2', 'x3']] target = df['y'] inputs = torch.te

我在Pytorch中为一个简单的回归问题(w1x1+w2x2+w3x3=y)建立了一个神经网络模型,其中我为训练数据生成了2000条记录,其中x1、x2、x3和W1=4、W2=6、W3=2的随机值。我创建了一个包含20条记录的测试数据集,其中只有x1、x2、x3的值,我希望得到的结果是,但是,该模型为所有20个输入行返回相同的值。我不知道问题在哪里。下面是代码片段

inputs = df[['x1', 'x2', 'x3']]
target = df['y']
inputs = torch.tensor(inputs.values).float()
target = torch.tensor(target.values).float()

test_data = torch.tensor(test_data.values).float()

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):

  def __init__(self):
    super(Net,self).__init__()

    hidden1 = 10
    hidden2 = 15

    self.fc1 = nn.Linear(3,hidden1)
    self.fc2 = nn.Linear(hidden1,hidden2)
    self.fc3 = nn.Linear(hidden2,1)


  def forward(self,x):
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = self.fc3(x)
    return x

#instantiate the model

model = Net()
print(model)

criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

model.train()

#epochs
epochs = 500


for x in range(epochs):
  #initialize the training loss to 0
  train_loss = 0
  #clear out gradients
  optimizer.zero_grad() 

  #calculate the output
  output = model(inputs)

  #calculate loss
  loss = criterion(output,target)

  #backpropagate
  loss.backward() 

  #update parameters
  optimizer.step()

  if ((x%5)==0):
    print('Training Loss after epoch {:2d} is {:2.6f}'.format(x,loss))

#set the model in evaluation mode
model.eval()

#Test the model on unseen data

test_output = model(test_data)

print(test_output)

首先尝试一个简单的直线模型,w1x1=y,只有几个数据点-应该可以。之后,尝试w1x1+w2x2=y,仅使用几个数据点,也应该可以。最后,尝试w1x1+w2x2+w3x3=y,只使用几个数据点。@JamesPhillips运气不好。对于所有值,对于单个输入w1x1=y,我仍然得到相同的输出。我建议用最小的代码问一个新问题,这个问题在代码中有两个数据点的“y=(w1*x1)+常量”中重现。将标题设置为“PyTorch无法将直线拟合到两个数据点”。首先尝试一个简单的直线模型,w1x1=y,只有几个数据点-应该可以。之后,尝试w1x1+w2x2=y,仅使用几个数据点,也应该可以。最后,尝试w1x1+w2x2+w3x3=y,只使用几个数据点。@JamesPhillips运气不好。对于所有值,对于单个输入w1x1=y,我仍然得到相同的输出。我建议用最小的代码问一个新问题,这个问题在代码中有两个数据点的“y=(w1*x1)+常量”中重现。使标题类似于“PyTorch将不适合两个数据点的直线”。