Несоответствие размера с использованием pytorch при попытке обучить данные - PullRequest
0 голосов
/ 05 октября 2019

Я действительно новичок в pytorch и просто пытаюсь использовать свой собственный набор данных для создания простой модели линейной регрессии. Я использую только числовые значения в качестве входных данных.

The CSV File I Imported

Я импортировал данные из CSV

dataset = pd.read_csv('mlb_games_overview.csv')

Я разделил данные на четыре части: X_train, X_test, y_train, y_test

X = dataset.drop(['date', 'team', 'runs', 'win'], 1)
y = dataset['win']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=True)

Я преобразовал данные в тензоры pytorch

X_train = torch.from_numpy(np.array(X_train))
X_test = torch.from_numpy(np.array(X_test))
y_train = torch.from_numpy(np.array(y_train))
y_test = torch.from_numpy(np.array(y_test))

Я создал LinearRegressionModel

class LinearRegressionModel(torch.nn.Module):
    def __init__(self):
        super(LinearRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)
    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred

Я инициализировал оптимизатор и функцию потерь

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

Теперь, когда я начинаю тренировать данные, я получаю несоответствие ошибок времени выполнения

EPOCHS = 500
for epoch in range(EPOCHS):
    pred_y = model(X_train) # RUNTIME ERROR HERE
    loss = criterion(pred_y, y_train)
    optimizer.zero_grad() # zero out gradients to update parameters correctly
    loss.backward() # backpropagation
    optimizer.step() # update weights
    print('epoch {}, loss {}'. format(epoch, loss.data[0]))

Журнал ошибок:

RuntimeError                              Traceback (most recent call last)
<ipython-input-40-c0474231d515> in <module>
  1 EPOCHS = 500
  2 for epoch in range(EPOCHS):
----> 3     pred_y = model(X_train)
  4     loss = criterion(pred_y, y_train)
  5     optimizer.zero_grad() # zero out gradients to update parameters correctly
RuntimeError: size mismatch, m1: [3540 x 8], m2: [1 x 1] at 
C:\w\1\s\windows\pytorch\aten\src\TH/generic/THTensorMath.cpp:752

1 Ответ

2 голосов
/ 05 октября 2019

В вашей модели линейной регрессии у вас есть:

self.linear = torch.nn.Linear(1, 1)

Но ваша форма тренировочных данных (X_train) равна 3540 x 8, что означает, что у вас есть 8 функций, представляющих каждый входной пример. Итак, вы должны определить линейный слой следующим образом.

self.linear = torch.nn.Linear(8, 1)

A линейный слой в PyTorch имеет параметры W и b. Если вы установите in_features на 8 и out_features на 1, то форма матрицы W будет 1 x 8, а длина вектора b будет равна 1.

Так как вашформа данных тренировки 3540 x 8, вы можете выполнить следующую операцию.

linear_out = X_train W_T + b

Надеюсь, это прояснит вашу путаницу.

...