Однако, когда я запускаю 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)