import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.model_selection import train_test_split
import numpy as np
Generate synthetic data
np.random.seed(42)
Split the data into training and testing sets
Convert data to PyTorch tensors
X_train_tensor = torch.tensor(result_df_train2.iloc[:, 1].values, dtype=torch.float32)
y_train_tensor = torch.tensor(result_df_train2.iloc[:, 2].values, dtype=torch.long)
X_test_tensor = torch.tensor(result_df_test2.iloc[:, 1].values, dtype=torch.float32)
y_test_tensor = torch.tensor(result_df_test2.iloc[:, 2], dtype=torch.long)
Create DataLoader
train_dataset = TensorDataset(X_train_tensor, y_train_tensor)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
Define the neural network model using nn.Sequential
model = nn.Sequential(
nn.Linear(1, 64), # One input feature, 64 hidden units
nn.ReLU(),
nn.Linear(64, 4), # 4 output units for 4 labels
nn.LogSoftmax(dim=1) # LogSoftmax for multiclass classification
)
Define loss function and optimizer
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
Training loop
num_epochs = 10
for epoch in range(num_epochs):
# Training
model.train()
total_loss = 0.0
correct_train = 0
for inputs, labels in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
total_loss += loss.item()
_, predicted = torch.max(outputs, 1)
correct_train += (predicted == labels).sum().item()
avg_loss = total_loss / len(train_loader.dataset)
accuracy_train = correct_train / len(train_loader.dataset)
# Testing
model.eval()
total_correct = 0
with torch.no_grad():
outputs_test = model(X_test_tensor)
_, predicted_test = torch.max(outputs_test, 1)
total_correct = (predicted_test == y_test_tensor).sum().item()
accuracy_test = total_correct / len(y_test_tensor)
Now, I am getting this error:
in <cell line: 39>()
45 for inputs, labels in train_loader:
46 optimizer.zero_grad()
—> 47 outputs = model(inputs)
48 loss = criterion(outputs, labels)
49 loss.backward()
5 frames
/usr/local/lib/python3.10/dist-packages/torch/nn/modules/linear.py in forward(self, input)
112
113 def forward(self, input: Tensor) → Tensor:
→ 114 return F.linear(input, self.weight, self.bias)
115
116 def extra_repr(self) → str:
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x64 and 1x64)
Can someone please help me??