Python PyTorch线性回归模型

Python PyTorch线性回归模型,python,pytorch,regression,linear-regression,Python,Pytorch,Regression,Linear Regression,我有一个多元线性回归问题,其中每个数据点如下所示: y_i = 3 # Some integer between 0 and 20 X_i = [0.5, 80, 0.004, 0.5, 0.789] # A 5 dimensional vector 我可以使用sklearn训练一个简单的线性模型,比如: from sklearn import linear_model ols = linear_model.LinearRegressi

我有一个多元线性回归问题,其中每个数据点如下所示:

y_i = 3                             # Some integer between 0 and 20
X_i = [0.5, 80, 0.004, 0.5, 0.789]  # A 5 dimensional vector
我可以使用sklearn训练一个简单的线性模型,比如:

from sklearn import linear_model
ols = linear_model.LinearRegression()
model = ols.fit(X, y)
这使我获得了约55%的准确度(线性模型不适用于该问题,但这是证明建模问题可行性的基线,也是我学习PyTorch的一种方法,之前使用过TensorFlow)

当我尝试使用PyTorch训练线性模型时,我将模型定义为:

class TwoLayerNet(torch.nn.Module):
    def __init__(self, D_in, D_out):

        super(TwoLayerNet, self).__init__()
        self.linear1 = torch.nn.Linear(D_in, D_out)

    def forward(self, x):

        y_pred = self.linear1(x)
        return y_pred

D_in, D_out = 5, 1
model = TwoLayerNet(D_in, D_out)
培训内容如下:

epochs = 10
criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
for epoch in range(epochs):
    for n, batch in enumerate(batches):
        X = []
        y = []
        for values in batch:
            X.append(values[0])
            y.append(values[1])
        
        X = torch.from_numpy(np.asarray(X))
        y = torch.from_numpy(np.asarray(y))
        # Forward pass: Compute predicted y by passing x to the model
        optimizer.zero_grad()
        y_pred = model(X)
        # Compute and print loss
        loss = criterion(y_pred, y)
        if n % 100 == 99:
            print(n, loss.item())

        # Zero gradients, perform a backward pass, and update the weights.
        
        loss.backward()
        optimizer.step()
这只是我调整过的PyTorch文档中的一些代码。目前的设置仅达到约25%,没有达到我预期的线性模型的精度。我在模型培训wrt PyTorch中做了什么不正确的事情吗?

tam63

模型定义中缺少激活函数。替换

y_pred = self.linear1(x)

几乎没有什么事情会出错。 例如:(1)学习率太低,(2)层次太少(再增加一层)。如果你像你所说的那样熟悉TF,试着在TF中解决同样的问题,一旦你有了好的结果——用同样的网络结构和同样的超参数把它翻译成Pytork

y_pred =  F.relu(self.linear1(x))