«Формы mat1 и mat2 не могут быть умножены», но форма на самом деле не соответствует данным? [закрыто]Python

Программы на Python
Anonymous
«Формы mat1 и mat2 не могут быть умножены», но форма на самом деле не соответствует данным? [закрыто]

Сообщение Anonymous »

Я использую PyTorch для обучения модели регрессии на 5 наборах данных отдельно, каждый размером 10x3361.
Однако, когда я запускаю PyTorch, он возвращает ошибку RuntimeError: фигуры mat1 и mat2 не могут быть умножены (10x [некоторые кратны 1499, варьируются от набора данных] и 3361x64)
Я знаю, что это означает, что первый слой nn.module имеет неправильную форму, но меня озадачивает следующее: почему он настаивает на том, чтобы форма набора данных включала некоторое число, кратное 1499, или почему это число варьируется в зависимости от того, какой набор данных используется, даже если все они имеют одинаковую форму.
Вот nn.module:

Код: Выделить всё

# define neural network model for regression
class Regression(nn.Module):

def __init__(self):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(3361, 64),
nn.ReLU(),
nn.Linear(64, 32),
nn.ReLU(),
nn.Linear(32, 1)
)

def forward(self, x):
'''
Forward pass
'''
return self.layers(x)
и цикл обучения:

Код: Выделить всё

def training_loop(n_epochs, train_loader):
# training loop

for epoch in range(n_epochs):

# Set current loss value
current_loss = 0.0
# Iterate over the DataLoader for training data
for i, data in enumerate(train_loader, 0):
# Get and prepare inputs
inputs, targets = data
inputs, targets = inputs.float(), targets.float()
targets = targets.reshape((targets.shape[0],1))
# Zero the gradients
optimizer.zero_grad()
# Perform forward pass
outputs = model(inputs)

# Compute loss
loss = loss_function(outputs, targets)

# Perform backward pass
loss.backward()

# Perform optimization
optimizer.step()
return model
А вот вызовы обоих в контексте:

Код: Выделить всё

exo_file="exo_data_rp2500_set.csv"
exo_data=pd.read_csv(exo_file)

input_size = exo_data.shape[1]
batch_size = 10
model=Regression()
n_epochs=100
# loss function and optimizer
loss_function =nn.MSELoss()
# mean square error
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)

...
metrics=[#list of the nine categories of features I'm investigating]

for metric in metrics:
#split and format data
exo_target=exo_metrics[metric]
X_train, X_test, y_train, y_test = train_test_split(exo_spectra,exo_target, test_size=0.2, random_state=23)
X_train_tensor = torch.from_numpy(X_train)
X_train_tensor = torch.tensor(X_train_tensor,dtype=torch.float32)
y_train_tensor = torch.from_numpy(y_train.values)
y_train_tensor = torch.tensor(y_train_tensor,dtype=torch.float32)
X_test_tensor = torch.from_numpy(X_test)
X_test_tensor = torch.tensor(X_test_tensor,dtype=torch.float32)
y_test_tensor= torch.from_numpy(y_test.values)
y_test_tensor = torch.tensor(y_test_tensor,dtype=torch.float32)
# load data
train_dataset = TensorDataset(X_train_tensor, y_train_tensor)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
# train data and assess accuracy
model=training_loop(n_epochs,train_loader)
y_pred = model(X_test_tensor)
model_score=r2_score(y_test_tensor.detach().numpy(),y_pred.detach().numpy())
scores.append(model_score)
Есть идеи, почему выдает эту ошибку?

Вернуться в «Python»