sentiment2 / main.py
zhanyil2's picture
Upload 12 files
0857e86
import torch
import torch.nn as nn
from torch import optim
from torch.utils.data import DataLoader
from NN import OffensiveLanguageClassifier, OffensiveLanguageDataset
# Set the device to use for training
from process_data import train
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
batch_size = 2
vocab_size = 23885
hidden_size = 128
output_size = 3
num_layers = 2
num_epochs = 2
# Create the model and move it to the device
model = OffensiveLanguageClassifier(vocab_size, hidden_size, output_size, num_layers, dropout = 0.3)
model.to(device)
# Define the loss function and the optimizer
loss_fn = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters())
# Create the DataLoader
train_dataset = OffensiveLanguageDataset(train[0], train["class"])
#print(train_dataset.shape)
#print(train_dataset.head(10))
dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
print(type(dataloader))
# Train the model
for epoch in range(num_epochs):
#print(dataloader)
#train_features, train_labels = next(iter(dataloader)
for data , labels in dataloader:
#print(data)
#print(labels)
#data, labels = data.to(device), labels.to(device)
# Forward pass
#print(type(data[0]))
data = torch.stack(data)
logits = model(data)
loss = loss_fn(logits, labels)
# Backward pass and optimization
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Print the loss and accuracy at the end of each epoch
print(f'Epoch {epoch+1}: loss = {loss:.4f}')