Я загружаю данные из CSV-файла 20 + 6 столбцов (элементы и метки). Я пытаюсь запустить свои данные через Convolutional Neural Network в pytorch. Я получаю сообщение об ошибке, говоря, что он ожидает 3D-ввода, и я даю ему 1D-вход. Я использую Conv1d.
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
import pandas as pd
from torch.utils.data import Dataset,DataLoader
from sklearn.model_selection import train_test_split
#Read Data
data=pd.read_csv('Data.csv')
Features=data[data.columns[0:20]]
Labels=data[data.columns[20:]]
#Split Data
X_train, X_test, y_train, y_test = train_test_split( Features, Labels, test_size=0.33, shuffle=True)
#Create Tensors
train_in=torch.tensor(X_train.values)
train_out=torch.tensor(y_train.values)
test_in=torch.tensor(X_test.values)
test_out=torch.tensor(y_test.values)
#Model CNN
class CNN(nn.Module):
def __init__(self):
super(CNN,self).__init__()
self.layer1 = nn.Sequential(
nn.Conv1d(20,40,kernel_size=5,stride=1,padding=2),
nn.ReLU(),
nn.MaxPool1d(kernel_size=2,stride=2)
)
self.layer2 = nn.Sequential(
nn.Conv1d(40,60,kernel_size=5,stride=1,padding=2),
nn.ReLU(),
nn.MaxPool1d(kernel_size=2,stride=2)
)
self.drop_out = nn.Dropout()
self.fc1 = nn.Linear(60,30)
self.fc2 = nn.Linear(30,15)
self.fc3 = nn.Linear(15,6)
def forward(self,x):
out=self.layer1(x)
out=self.layer2(out)
out=self.drop_out(out)
out=self.fc1(out)
out=self.fc2(out)
out=self.fc3(out)
return out
Epochs=10
N_labels=len(Labels.columns)
N_features=len(Features.columns)
batch_size=100
learning_rate=0.001
#TRAIN MODEL
model = CNN()
#LOSS AND OPTIMIZER
criterion = torch.nn.SmoothL1Loss()
optimizer = torch.optim.Adam(model.parameters(),lr=learning_rate)
#TRAIN MODEL
model.train()
idx=0
for i in train_in:
y=model(i)
loss=criterion(y,train_out[idx])
idx+=1
loss.backward()
optimizer.step()
Как мне написать Тренинг и Eval l oop? Все примеры, которые я вижу в inte rnet, используют изображения, а также DataLoader.