如何解决Python(Pytorch)中的大小不匹配错误

问题描述 投票:0回答:1

我目前正在使用PyTorch进行多元线性回归,并且遇到了以下错误,我在该错误中进行了大量搜索,唯一了解的是数据和标签之间存在大小不匹配。但是如何解决这个错误。请帮助我或向我展示解决此问题的正确方法。

大小不匹配,m1:[824 x 1],m2:[8 x 8]

import torch
import torch.nn as nn
import numpy as np


Xtr = np.loadtxt("TrainData.csv")
Ytr = np.loadtxt("TrainLabels.csv")


X_train = torch.FloatTensor(Xtr)
Y_train = torch.FloatTensor(Ytr)

#### MODEL ARCHITECTURE #### 

class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = torch.nn.Linear(8,8)
        self.lin2 = torch.nn.Linear(8,1)

    def forward(self, x):
        x = self.lin2(x)
        y_pred = self.linear(x)
        return y_pred

model = Model()

loss_func = nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
#print(len(list(model.parameters())))
def count_params(model): 
    return sum(p.numel() for p in model.parameters() if p.requires_grad)

### TRAINING 
for epoch in range(2):
    y_pred = model(X_train)

    loss = loss_func(y_pred, Y_train)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    count = count_params(model)
    print(count)

test_exp = torch.FloatTensor([[6.0]])
python pytorch linear-regression
1个回答
0
投票

看起来您的前向通行证中的操作顺序不正确。简短的答案是按如下所示交换它们。有关以下各种形状的更多信息。

    def forward(self, x):
        x = self.lin2(x)
        y_pred = self.linear(x)
        return y_pred

应该是:

    def forward(self, x):
        x = self.linear(x)
        y_pred = self.lin2(x)
        return y_pred

假设您具有8个功能且批处理大小为N,则前向传递的输入数据的大小将为(N x 8)。通过lin2传递后,其形状将为(N x 1)linear节点需要一个形状为(N x 8)的输入,但它的输入为(N x 1),因此出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.