0% found this document useful (0 votes)
32 views12 pages

Medical Text Classifier GabrieldeOlaguibel

Uploaded by

gabriel-l
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views12 pages

Medical Text Classifier GabrieldeOlaguibel

Uploaded by

gabriel-l
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

Assignment 7: Medical Text Classification (NLP)


This task involves creating clasiffy patient transcriptions into 4 categories:
Surgery
Medical Records
Internal Medicine
Other
I have been given the following data files:
X.csv: A fully processed dataset. Simplified to 4 classes
classes.txt: Text file describing the dataset's classes: Surgery, Medical Records, Internal Medicine and Other
train.csv: Training data subset. Contains 90% of the X.csv processed file.
Test data subset. Contains 10% of the X.csv processed file.
I'm also given the following data source files:
mtsamples.csv: Compiled from Kaggle's medical transcriptions dataset by Tara Boyle, scraped from Transcribed Medical Transcription Sample Reports and Examples
clinical-stopwords.txt: Compiled from Dr. Kavita Ganesan clinical-concepts repository. See the Discovering Related Clinical Concepts Using Large Amounts of Clinical Notes paper.
vocab.txt: Generated vocabulary text files for Natural Language Processing (NLP) using the Systematized Nomenclature of Medicine International (SNMI) data.

Google Colab Link: https://colab.research.google.com/drive/1lREcVRGtD4pk1iyQrAeaqS5RffhdENAi?


usp=sharing
Important: The code for the models are made train on CPU (it will cause errors if you train on GPU)
In [ ]: # Library Imports
import pandas as pd
import numpy as np
import torch
import nltk
from nltk.tokenize import word_tokenize
from gensim.models import Word2Vec
from torch.utils.data import TensorDataset, DataLoader
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt

1. Load the Data


In [ ]: # Download NLTK's punkt tokenizer model
nltk.download('punkt')

# Load Datasets
train_df = pd.read_csv('train.csv')
test_df = pd.read_csv('test.csv')

# load the the text data


with open('clinical-stopwords.txt', 'r') as file:
stopwords = file.read().splitlines()
stopwords = [word.strip("#") for word in stopwords if word not in ["", " ", "\n"]]
stopwords_set = set(stopwords) # Convert to set for faster lookup

with open('vocab.txt', 'r') as file:


vocab = file.read().splitlines()
vocab = [word.lower().strip() for word in vocab if word not in ["", " ", "\n"]]
vocab_set = set(vocab) # Convert to set for faster lookup

[nltk_data] Error loading punkt: <urlopen error [SSL:


[nltk_data] CERTIFICATE_VERIFY_FAILED] certificate verify failed:
[nltk_data] unable to get local issuer certificate (_ssl.c:1002)>

2. Data Preprocessing
In [ ]: # Preprocessing functions

def clean_text(text):
"""Perform basic text cleaning and convert text to lowercase."""
return text.lower()

def tokenize_and_filter(text, stopwords_set, vocab_set):


"""
Tokenize the text using NLTK's word_tokenize, remove stopwords, and filter by vocab.
"""
tokens = word_tokenize(text)
filtered_tokens = [token for token in tokens if token not in stopwords_set and token in vocab_set]
return filtered_tokens

def stem_text(tokens):
"""
Perform stemming on the tokens using NLTK's PorterStemmer.
"""
stemmer = nltk.PorterStemmer()
stemmed_tokens = [stemmer.stem(token) for token in tokens]
return stemmed_tokens

def preprocess_text(text, stopwords_set, vocab_set):


"""
Clean, tokenize, and filter the text based on stopwords and vocab.
"""
cleaned_text = clean_text(text)
filtered_tokens = tokenize_and_filter(cleaned_text, stopwords_set, vocab_set)
stemmed_tokens = stem_text(filtered_tokens)
return ' '.join(stemmed_tokens)

In [ ]: # Apply Preprocessing to Datasets


train_df['cleaned_text'] = train_df['text'].apply(lambda x: preprocess_text(x, stopwords_set, vocab_set))
test_df['cleaned_text'] = test_df['text'].apply(lambda x: preprocess_text(x, stopwords_set, vocab_set))

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 1/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

In [ ]: # Prepare data for embedding

# Combine train and test data for the Word2Vec model to ensure it's trained on all the data
combined_text = list(train_df['cleaned_text']) + list(test_df['cleaned_text'])
tokenized_data = [text.split() for text in combined_text]

In [ ]: # Train Word2Vec model

w2v_model = Word2Vec(sentences=tokenized_data, vector_size=300, window=5, min_count=1, workers=4)

def document_embedding(text, model):


"""Generate document embeddings by averaging word vectors."""
words = text.split()
words_in_vocab = [word for word in words if word in model.wv]
if not words_in_vocab:
return np.zeros(model.vector_size)
embedding = np.mean([model.wv[word] for word in words_in_vocab], axis=0)
return embedding

# Apply Document Embedding to DataFrame


train_df['embedding'] = train_df['cleaned_text'].apply(lambda x: document_embedding(x, w2v_model))
test_df['embedding'] = test_df['cleaned_text'].apply(lambda x: document_embedding(x, w2v_model))

3. Prep Dataset for Learning


In [ ]: # Adjusting the labels to be zero-indexed since they start from 1
train_df['label'] = train_df['label'] - 1
test_df['label'] = test_df['label'] - 1

In [ ]: # Conversion of embeddings and labels to tensors


train_features = torch.tensor(train_df['embedding'].tolist())
train_labels = torch.tensor(train_df['label'].values)
test_features = torch.tensor(test_df['embedding'].tolist())
test_labels = torch.tensor(test_df['label'].values)

# Ensure tensors are of float type for features and long (int) for labels
train_features = train_features.float()
test_features = test_features.float()
train_labels = train_labels.long()
test_labels = test_labels.long()

# Create TensorDatasets
train_dataset = TensorDataset(train_features, train_labels)
test_dataset = TensorDataset(test_features, test_labels)

# Create DataLoaders for batching the data


batch_size = 128 # This can be adjusted
trainloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
testloader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

/var/folders/fc/pwfmg_jd7k9d9mxgnl_clxr00000gn/T/ipykernel_994/3927493600.py:2: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consi
der converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torc
h/csrc/utils/tensor_new.cpp:248.)
train_features = torch.tensor(train_df['embedding'].tolist())

In [ ]: # Calculate class weights to handle slight class imbalance

# Counts for each class to calculate class weights


class_counts = torch.tensor([1442, 1126, 1040, 891], dtype=torch.float)

# Calculate class weights


total_count = class_counts.sum()
num_classes = len(class_counts)
class_weights = total_count / (num_classes * class_counts)

# If you're using a GPU, you might want to move the weights to the same device as your model and data
class_weights = class_weights.to('cuda' if torch.cuda.is_available() else 'cpu')

print("Class weights:", class_weights)

Class weights: tensor([0.7800, 0.9989, 1.0815, 1.2623])

4. Build First Model: Plain Vanilla Neural Network


In [ ]: # Define the NN architecture
class SimpleNN(nn.Module):
def __init__(self, input_dim, output_dim):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(input_dim, 64) # First layer
self.fc2 = nn.Linear(64, 32) # Second layer
self.fc3 = nn.Linear(32, output_dim)# Output layer

def forward(self, x):


x = F.relu(self.fc1(x)) # Activation function for first layer
x = F.relu(self.fc2(x)) # Activation function for second layer
x = self.fc3(x) # No activation for output layer in forward pass
return x

# Initialize model, loss, and optimizer


nn_input_dim = 300 # Embedding dimension
nn_output_dim = 4 # Number of classes
nn_model = SimpleNN(nn_input_dim, nn_output_dim)
nn_criterion = nn.CrossEntropyLoss(weight = class_weights) # added class weights to the loss function
nn_optimizer = torch.optim.SGD(nn_model.parameters(), lr=0.02)

5. Build the second Model: Recurrent Neural Network


In [ ]: class SimpleRNN(nn.Module):
def __init__(self, input_dim, output_dim, hidden_dim, num_layers):
super(SimpleRNN, self).__init__()
self.hidden_dim = hidden_dim
self.num_layers = num_layers
self.rnn = nn.RNN(input_dim, hidden_dim, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)

def forward(self, x):


# Expecting x to be of shape [batch_size, seq_len, features]
batch_size = x.size(0)
h0 = torch.zeros(self.num_layers, batch_size, self.hidden_dim).to(x.device)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :]) # Use the output of the last time step

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 2/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

return out

# Initialize the RNN model


rnn_input_dim = 1 # Number of features per time step (adjusted for example)
rnn_hidden_dim = 64 # RNN hidden dimension
rnn_num_layers = 1 # Number of RNN layers
rnn_output_dim = 4 # Number of output classes
rnn_model = SimpleRNN(rnn_input_dim, rnn_output_dim, rnn_hidden_dim, rnn_num_layers)
rnn_criterion = nn.CrossEntropyLoss(weight=class_weights)
#optimizer = optim.SGD(model.parameters(), lr=0.05)
rnn_optimizer = optim.Adam(rnn_model.parameters(), lr=0.005)

6. Build the Third Model: Convolutional Neural Network


In [ ]: class SimpleCNN(nn.Module):
def __init__(self, seq_len, input_dim, output_dim):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv1d(in_channels=seq_len, out_channels=64, kernel_size=3, stride=1, padding=1)
# No pooling layer to avoid reducing sequence length to 0
self.fc1 = nn.Linear(64 * input_dim, 64) # Adapt based on your actual input dimensions
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, output_dim)

def forward(self, x):


x = x.permute(0, 2, 1) # Adjust to (batch, channels, length) for Conv1d
x = F.relu(self.conv1(x))
# No pooling here
x = x.view(x.size(0), -1) # Flatten
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

# Adjustments in model initialization


cnn_seq_len = 300 # Embedding dimension
cnn_input_dim = 1 # Assuming each sequence step has 1 dimension
cnn_output_dim = 4 # Number of output classes
cnn_model = SimpleCNN(cnn_seq_len, cnn_input_dim, cnn_output_dim)
cnn_criterion = nn.CrossEntropyLoss(weight=class_weights)
cnn_optimizer = torch.optim.SGD(cnn_model.parameters(), lr=0.01)

6. Build the second Model: LSTM


In [ ]: class SimpleLSTM(nn.Module):
def __init__(self, input_dim, lstm_hidden_dim, output_dim, lstm_num_layers):
super(SimpleLSTM, self).__init__()
self.lstm_hidden_dim = lstm_hidden_dim
self.lstm_num_layers = lstm_num_layers

# LSTM layer
self.lstm = nn.LSTM(input_dim, lstm_hidden_dim, lstm_num_layers, batch_first=True)

# Fully connected layer


self.fc1 = nn.Linear(lstm_hidden_dim, 64)
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, output_dim)

def forward(self, x):


# Initialize hidden and cell states
h0 = torch.zeros(self.lstm_num_layers, x.size(0), self.lstm_hidden_dim).to(x.device)
c0 = torch.zeros(self.lstm_num_layers, x.size(0), self.lstm_hidden_dim).to(x.device)

# Forward propagate the LSTM


out, _ = self.lstm(x, (h0, c0))

# Take the output of the last time step


out = out[:, -1, :]
out = F.relu(self.fc1(out))
out = F.relu(self.fc2(out))
out = self.fc3(out)
return out

# Model initialization
lstm_input_dim = 1 # Number of features per time step
lstm_hidden_dim = 64 # Number of features in the hidden state
lstm_num_layers = 1 # Number of stacked LSTM layers
lstm_output_dim = 4 # Number of output classes
lstm_model = SimpleLSTM(lstm_input_dim, lstm_hidden_dim, lstm_output_dim, lstm_num_layers)
lstm_criterion = nn.CrossEntropyLoss(weight=class_weights)
lstm_optimizer = torch.optim.Adam(lstm_model.parameters(), lr=0.01)

7. Run the Models


In [ ]: # Define usefull functions for running the models

def reshape_input_for_rnn(vectors):
"""Reshapes input vectors for RNN models."""
return vectors.view(vectors.size(0), 300, 1) # Adjust the reshape parameters as needed for your RNN

def add_channel_dimension(vectors):
"""Adds a channel dimension to the input vectors, required for CNN models."""
return vectors.unsqueeze(1) # Add a channel dimension

def ensure_input_shape_for_lstm(vectors):
"""Ensures input vectors are of shape (batch_size, seq_len, input_dim) for LSTM models."""
return vectors.unsqueeze(-1) # Add the necessary dimension

def plot_training_validation_loss_accuracy(training_losses, validation_losses, training_accuracies, validation_accuracies):


"""Plots the training and validation loss and accuracy."""
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(training_losses, label='Training Loss')
plt.plot(validation_losses, label='Validation Loss')
plt.title('Loss over time')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()

plt.subplot(1, 2, 2)

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 3/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

plt.plot(training_accuracies, label='Training Accuracy')


plt.plot(validation_accuracies, label='Validation Accuracy')
plt.title('Accuracy over time')
plt.xlabel('Epoch')
plt.ylabel('Accuracy (%)')
plt.legend()

plt.tight_layout()
plt.show()

def train_and_validate_model(model, trainloader, testloader, criterion, optimizer, epochs=100, input_transform=None):


"""
Trains and validates the model, including an optional input transformation.

Parameters:
- model: The model to be trained and validated.
- trainloader: DataLoader for training data.
- testloader: DataLoader for test/validation data.
- criterion: The loss function.
- optimizer: The optimizer.
- epochs: Number of epochs to train for.
- input_transform: Optional function to transform input data (e.g., reshaping for RNN or adding a channel dimension for CNN).
"""
training_losses = []
validation_losses = []
training_accuracies = []
validation_accuracies = []

for epoch in range(epochs):


model.train()
total_loss, total, correct = 0, 0, 0
for vectors, targets in trainloader:
if input_transform:
vectors = input_transform(vectors)
optimizer.zero_grad()
outputs = model(vectors)
loss = criterion(outputs, targets)
total_loss += loss.item()
_, predicted = torch.max(outputs.data, 1)
total += targets.size(0)
correct += (predicted == targets).sum().item()
loss.backward()
optimizer.step()

training_losses.append(total_loss / len(trainloader))
training_accuracies.append(100 * correct / total)

model.eval()
total_loss, total, correct = 0, 0, 0
with torch.no_grad():
for vectors, targets in testloader:
if input_transform:
vectors = input_transform(vectors)
outputs = model(vectors)
loss = criterion(outputs, targets)
total_loss += loss.item()
_, predicted = torch.max(outputs.data, 1)
total += targets.size(0)
correct += (predicted == targets).sum().item()

validation_losses.append(total_loss / len(testloader))
validation_accuracies.append(100 * correct / total)

print(f'Epoch {epoch+1}/{epochs}, Training Loss: {training_losses[-1]:.4f}, Training Accuracy: {training_accuracies[-1]:.2f}%, Validation Loss: {validation_losses[-

return training_losses, validation_losses, training_accuracies, validation_accuracies

In [ ]: # Run and plot the results of the SimpleNN model


training_losses, validation_losses, training_accuracies, validation_accuracies = train_and_validate_model(
model=nn_model, # This can be cnn_model or lstm_model as well
trainloader=trainloader,
testloader=testloader,
criterion=nn_criterion,
optimizer=nn_optimizer,
epochs=100
)

plot_training_validation_loss_accuracy(training_losses, validation_losses, training_accuracies, validation_accuracies)

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 4/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

Epoch 1/100, Training Loss: 1.3875, Training Accuracy: 24.96%, Validation Loss: 1.3833, Validation Accuracy: 28.00%
Epoch 2/100, Training Loss: 1.3774, Training Accuracy: 40.72%, Validation Loss: 1.3720, Validation Accuracy: 47.00%
Epoch 3/100, Training Loss: 1.3670, Training Accuracy: 48.77%, Validation Loss: 1.3599, Validation Accuracy: 51.40%
Epoch 4/100, Training Loss: 1.3541, Training Accuracy: 51.46%, Validation Loss: 1.3448, Validation Accuracy: 53.00%
Epoch 5/100, Training Loss: 1.3385, Training Accuracy: 51.81%, Validation Loss: 1.3260, Validation Accuracy: 53.00%
Epoch 6/100, Training Loss: 1.3174, Training Accuracy: 51.81%, Validation Loss: 1.3022, Validation Accuracy: 53.40%
Epoch 7/100, Training Loss: 1.2917, Training Accuracy: 52.10%, Validation Loss: 1.2736, Validation Accuracy: 53.40%
Epoch 8/100, Training Loss: 1.2617, Training Accuracy: 52.08%, Validation Loss: 1.2422, Validation Accuracy: 53.20%
Epoch 9/100, Training Loss: 1.2334, Training Accuracy: 52.23%, Validation Loss: 1.2115, Validation Accuracy: 53.60%
Epoch 10/100, Training Loss: 1.2086, Training Accuracy: 52.41%, Validation Loss: 1.1872, Validation Accuracy: 54.20%
Epoch 11/100, Training Loss: 1.1845, Training Accuracy: 52.41%, Validation Loss: 1.1677, Validation Accuracy: 53.80%
Epoch 12/100, Training Loss: 1.1685, Training Accuracy: 52.28%, Validation Loss: 1.1547, Validation Accuracy: 54.20%
Epoch 13/100, Training Loss: 1.1620, Training Accuracy: 52.06%, Validation Loss: 1.1460, Validation Accuracy: 52.60%
Epoch 14/100, Training Loss: 1.1562, Training Accuracy: 51.97%, Validation Loss: 1.1366, Validation Accuracy: 54.20%
Epoch 15/100, Training Loss: 1.1444, Training Accuracy: 51.90%, Validation Loss: 1.1298, Validation Accuracy: 54.20%
Epoch 16/100, Training Loss: 1.1384, Training Accuracy: 52.06%, Validation Loss: 1.1227, Validation Accuracy: 54.20%
Epoch 17/100, Training Loss: 1.1288, Training Accuracy: 52.26%, Validation Loss: 1.1134, Validation Accuracy: 53.60%
Epoch 18/100, Training Loss: 1.1209, Training Accuracy: 52.14%, Validation Loss: 1.1051, Validation Accuracy: 53.40%
Epoch 19/100, Training Loss: 1.1095, Training Accuracy: 52.03%, Validation Loss: 1.0938, Validation Accuracy: 53.40%
Epoch 20/100, Training Loss: 1.0985, Training Accuracy: 52.39%, Validation Loss: 1.0855, Validation Accuracy: 52.60%
Epoch 21/100, Training Loss: 1.0881, Training Accuracy: 52.46%, Validation Loss: 1.0736, Validation Accuracy: 53.00%
Epoch 22/100, Training Loss: 1.0725, Training Accuracy: 52.32%, Validation Loss: 1.0587, Validation Accuracy: 53.00%
Epoch 23/100, Training Loss: 1.0593, Training Accuracy: 52.34%, Validation Loss: 1.0433, Validation Accuracy: 53.20%
Epoch 24/100, Training Loss: 1.0478, Training Accuracy: 52.32%, Validation Loss: 1.0289, Validation Accuracy: 52.60%
Epoch 25/100, Training Loss: 1.0348, Training Accuracy: 52.46%, Validation Loss: 1.0169, Validation Accuracy: 52.20%
Epoch 26/100, Training Loss: 1.0187, Training Accuracy: 52.61%, Validation Loss: 1.0066, Validation Accuracy: 53.00%
Epoch 27/100, Training Loss: 1.0111, Training Accuracy: 52.75%, Validation Loss: 0.9934, Validation Accuracy: 52.20%
Epoch 28/100, Training Loss: 0.9991, Training Accuracy: 52.57%, Validation Loss: 0.9852, Validation Accuracy: 51.80%
Epoch 29/100, Training Loss: 0.9855, Training Accuracy: 52.88%, Validation Loss: 0.9769, Validation Accuracy: 53.20%
Epoch 30/100, Training Loss: 0.9872, Training Accuracy: 52.83%, Validation Loss: 0.9725, Validation Accuracy: 53.20%
Epoch 31/100, Training Loss: 0.9792, Training Accuracy: 53.19%, Validation Loss: 0.9665, Validation Accuracy: 53.20%
Epoch 32/100, Training Loss: 0.9748, Training Accuracy: 53.17%, Validation Loss: 0.9630, Validation Accuracy: 53.20%
Epoch 33/100, Training Loss: 0.9723, Training Accuracy: 53.17%, Validation Loss: 0.9598, Validation Accuracy: 53.40%
Epoch 34/100, Training Loss: 0.9729, Training Accuracy: 53.21%, Validation Loss: 0.9523, Validation Accuracy: 53.40%
Epoch 35/100, Training Loss: 0.9615, Training Accuracy: 53.55%, Validation Loss: 0.9492, Validation Accuracy: 54.40%
Epoch 36/100, Training Loss: 0.9675, Training Accuracy: 53.43%, Validation Loss: 0.9508, Validation Accuracy: 54.00%
Epoch 37/100, Training Loss: 0.9574, Training Accuracy: 53.15%, Validation Loss: 0.9434, Validation Accuracy: 53.80%
Epoch 38/100, Training Loss: 0.9587, Training Accuracy: 53.37%, Validation Loss: 0.9431, Validation Accuracy: 54.40%
Epoch 39/100, Training Loss: 0.9519, Training Accuracy: 53.61%, Validation Loss: 0.9375, Validation Accuracy: 54.40%
Epoch 40/100, Training Loss: 0.9613, Training Accuracy: 53.70%, Validation Loss: 0.9384, Validation Accuracy: 53.00%
Epoch 41/100, Training Loss: 0.9498, Training Accuracy: 53.81%, Validation Loss: 0.9318, Validation Accuracy: 54.80%
Epoch 42/100, Training Loss: 0.9472, Training Accuracy: 53.52%, Validation Loss: 0.9315, Validation Accuracy: 55.20%
Epoch 43/100, Training Loss: 0.9428, Training Accuracy: 53.50%, Validation Loss: 0.9299, Validation Accuracy: 54.40%
Epoch 44/100, Training Loss: 0.9420, Training Accuracy: 53.88%, Validation Loss: 0.9301, Validation Accuracy: 54.40%
Epoch 45/100, Training Loss: 0.9382, Training Accuracy: 53.55%, Validation Loss: 0.9265, Validation Accuracy: 54.40%
Epoch 46/100, Training Loss: 0.9348, Training Accuracy: 53.63%, Validation Loss: 0.9239, Validation Accuracy: 55.00%
Epoch 47/100, Training Loss: 0.9352, Training Accuracy: 53.57%, Validation Loss: 0.9211, Validation Accuracy: 55.00%
Epoch 48/100, Training Loss: 0.9337, Training Accuracy: 53.55%, Validation Loss: 0.9198, Validation Accuracy: 55.20%
Epoch 49/100, Training Loss: 0.9313, Training Accuracy: 53.86%, Validation Loss: 0.9165, Validation Accuracy: 55.20%
Epoch 50/100, Training Loss: 0.9293, Training Accuracy: 53.52%, Validation Loss: 0.9180, Validation Accuracy: 54.80%
Epoch 51/100, Training Loss: 0.9303, Training Accuracy: 53.81%, Validation Loss: 0.9166, Validation Accuracy: 54.40%
Epoch 52/100, Training Loss: 0.9272, Training Accuracy: 53.88%, Validation Loss: 0.9146, Validation Accuracy: 55.20%
Epoch 53/100, Training Loss: 0.9247, Training Accuracy: 53.97%, Validation Loss: 0.9119, Validation Accuracy: 54.60%
Epoch 54/100, Training Loss: 0.9254, Training Accuracy: 53.92%, Validation Loss: 0.9103, Validation Accuracy: 54.60%
Epoch 55/100, Training Loss: 0.9221, Training Accuracy: 54.06%, Validation Loss: 0.9126, Validation Accuracy: 54.80%
Epoch 56/100, Training Loss: 0.9275, Training Accuracy: 53.95%, Validation Loss: 0.9112, Validation Accuracy: 54.80%
Epoch 57/100, Training Loss: 0.9223, Training Accuracy: 53.90%, Validation Loss: 0.9074, Validation Accuracy: 54.40%
Epoch 58/100, Training Loss: 0.9201, Training Accuracy: 53.88%, Validation Loss: 0.9060, Validation Accuracy: 54.60%
Epoch 59/100, Training Loss: 0.9163, Training Accuracy: 54.23%, Validation Loss: 0.9100, Validation Accuracy: 52.60%
Epoch 60/100, Training Loss: 0.9219, Training Accuracy: 53.88%, Validation Loss: 0.9047, Validation Accuracy: 54.40%
Epoch 61/100, Training Loss: 0.9149, Training Accuracy: 53.90%, Validation Loss: 0.9055, Validation Accuracy: 53.80%
Epoch 62/100, Training Loss: 0.9188, Training Accuracy: 53.97%, Validation Loss: 0.9051, Validation Accuracy: 54.00%
Epoch 63/100, Training Loss: 0.9209, Training Accuracy: 54.46%, Validation Loss: 0.9000, Validation Accuracy: 55.20%
Epoch 64/100, Training Loss: 0.9095, Training Accuracy: 54.35%, Validation Loss: 0.8976, Validation Accuracy: 54.40%
Epoch 65/100, Training Loss: 0.9080, Training Accuracy: 54.32%, Validation Loss: 0.9005, Validation Accuracy: 53.40%
Epoch 66/100, Training Loss: 0.9115, Training Accuracy: 54.46%, Validation Loss: 0.8976, Validation Accuracy: 55.60%
Epoch 67/100, Training Loss: 0.9098, Training Accuracy: 54.43%, Validation Loss: 0.8924, Validation Accuracy: 54.60%
Epoch 68/100, Training Loss: 0.9140, Training Accuracy: 54.86%, Validation Loss: 0.8934, Validation Accuracy: 55.60%
Epoch 69/100, Training Loss: 0.9067, Training Accuracy: 54.23%, Validation Loss: 0.8935, Validation Accuracy: 55.00%
Epoch 70/100, Training Loss: 0.9076, Training Accuracy: 54.70%, Validation Loss: 0.8984, Validation Accuracy: 53.80%
Epoch 71/100, Training Loss: 0.9046, Training Accuracy: 54.48%, Validation Loss: 0.8923, Validation Accuracy: 55.20%
Epoch 72/100, Training Loss: 0.9091, Training Accuracy: 54.46%, Validation Loss: 0.8889, Validation Accuracy: 55.00%
Epoch 73/100, Training Loss: 0.9051, Training Accuracy: 54.43%, Validation Loss: 0.8872, Validation Accuracy: 55.20%
Epoch 74/100, Training Loss: 0.9060, Training Accuracy: 54.72%, Validation Loss: 0.8895, Validation Accuracy: 55.20%
Epoch 75/100, Training Loss: 0.9054, Training Accuracy: 54.90%, Validation Loss: 0.8832, Validation Accuracy: 55.00%
Epoch 76/100, Training Loss: 0.8992, Training Accuracy: 55.06%, Validation Loss: 0.8897, Validation Accuracy: 53.60%
Epoch 77/100, Training Loss: 0.8977, Training Accuracy: 54.39%, Validation Loss: 0.8874, Validation Accuracy: 54.80%
Epoch 78/100, Training Loss: 0.9003, Training Accuracy: 54.70%, Validation Loss: 0.8861, Validation Accuracy: 54.60%
Epoch 79/100, Training Loss: 0.8991, Training Accuracy: 54.83%, Validation Loss: 0.8819, Validation Accuracy: 54.40%
Epoch 80/100, Training Loss: 0.8934, Training Accuracy: 55.01%, Validation Loss: 0.8840, Validation Accuracy: 54.20%
Epoch 81/100, Training Loss: 0.8970, Training Accuracy: 55.01%, Validation Loss: 0.8889, Validation Accuracy: 54.20%
Epoch 82/100, Training Loss: 0.8955, Training Accuracy: 54.57%, Validation Loss: 0.8817, Validation Accuracy: 54.60%
Epoch 83/100, Training Loss: 0.8975, Training Accuracy: 54.97%, Validation Loss: 0.8795, Validation Accuracy: 55.40%
Epoch 84/100, Training Loss: 0.9003, Training Accuracy: 55.19%, Validation Loss: 0.8781, Validation Accuracy: 54.60%
Epoch 85/100, Training Loss: 0.8945, Training Accuracy: 54.83%, Validation Loss: 0.8779, Validation Accuracy: 55.00%
Epoch 86/100, Training Loss: 0.8894, Training Accuracy: 55.15%, Validation Loss: 0.8814, Validation Accuracy: 54.40%
Epoch 87/100, Training Loss: 0.8909, Training Accuracy: 54.83%, Validation Loss: 0.8774, Validation Accuracy: 55.20%
Epoch 88/100, Training Loss: 0.8868, Training Accuracy: 55.37%, Validation Loss: 0.8770, Validation Accuracy: 55.40%
Epoch 89/100, Training Loss: 0.8910, Training Accuracy: 54.97%, Validation Loss: 0.8800, Validation Accuracy: 54.80%
Epoch 90/100, Training Loss: 0.8886, Training Accuracy: 55.12%, Validation Loss: 0.8773, Validation Accuracy: 54.00%
Epoch 91/100, Training Loss: 0.8894, Training Accuracy: 54.61%, Validation Loss: 0.8754, Validation Accuracy: 55.00%
Epoch 92/100, Training Loss: 0.8933, Training Accuracy: 55.21%, Validation Loss: 0.8755, Validation Accuracy: 54.40%
Epoch 93/100, Training Loss: 0.8889, Training Accuracy: 54.92%, Validation Loss: 0.8760, Validation Accuracy: 54.20%
Epoch 94/100, Training Loss: 0.8895, Training Accuracy: 54.95%, Validation Loss: 0.8806, Validation Accuracy: 53.40%
Epoch 95/100, Training Loss: 0.8873, Training Accuracy: 55.17%, Validation Loss: 0.8761, Validation Accuracy: 53.40%
Epoch 96/100, Training Loss: 0.8821, Training Accuracy: 55.03%, Validation Loss: 0.8688, Validation Accuracy: 56.00%
Epoch 97/100, Training Loss: 0.8818, Training Accuracy: 55.26%, Validation Loss: 0.8745, Validation Accuracy: 54.20%
Epoch 98/100, Training Loss: 0.8904, Training Accuracy: 55.26%, Validation Loss: 0.8721, Validation Accuracy: 54.00%
Epoch 99/100, Training Loss: 0.8841, Training Accuracy: 54.95%, Validation Loss: 0.8682, Validation Accuracy: 55.40%
Epoch 100/100, Training Loss: 0.8837, Training Accuracy: 55.12%, Validation Loss: 0.8746, Validation Accuracy: 53.80%

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 5/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

In [ ]: # Run and plot the results of the RNN model


training_losses, validation_losses, training_accuracies, validation_accuracies = train_and_validate_model(
model=rnn_model,
trainloader=trainloader,
testloader=testloader,
criterion=rnn_criterion,
optimizer=rnn_optimizer,
epochs=100,
input_transform=reshape_input_for_rnn # Ensure this matches your RNN's expected input shape
)

plot_training_validation_loss_accuracy(training_losses, validation_losses, training_accuracies, validation_accuracies)

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 6/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

Epoch 1/100, Training Loss: 1.2931, Training Accuracy: 37.74%, Validation Loss: 1.2026, Validation Accuracy: 50.20%
Epoch 2/100, Training Loss: 1.1814, Training Accuracy: 48.99%, Validation Loss: 1.1972, Validation Accuracy: 42.60%
Epoch 3/100, Training Loss: 1.1221, Training Accuracy: 49.48%, Validation Loss: 1.1849, Validation Accuracy: 47.40%
Epoch 4/100, Training Loss: 1.2006, Training Accuracy: 45.08%, Validation Loss: 1.1297, Validation Accuracy: 47.60%
Epoch 5/100, Training Loss: 1.1409, Training Accuracy: 49.37%, Validation Loss: 1.1113, Validation Accuracy: 49.60%
Epoch 6/100, Training Loss: 1.1175, Training Accuracy: 50.61%, Validation Loss: 1.1021, Validation Accuracy: 48.80%
Epoch 7/100, Training Loss: 1.1115, Training Accuracy: 51.23%, Validation Loss: 1.1084, Validation Accuracy: 48.80%
Epoch 8/100, Training Loss: 1.0832, Training Accuracy: 52.30%, Validation Loss: 1.0562, Validation Accuracy: 51.00%
Epoch 9/100, Training Loss: 1.0650, Training Accuracy: 51.99%, Validation Loss: 1.0643, Validation Accuracy: 50.60%
Epoch 10/100, Training Loss: 1.0569, Training Accuracy: 52.50%, Validation Loss: 1.1051, Validation Accuracy: 49.80%
Epoch 11/100, Training Loss: 1.0883, Training Accuracy: 51.61%, Validation Loss: 1.0779, Validation Accuracy: 51.40%
Epoch 12/100, Training Loss: 1.0832, Training Accuracy: 50.59%, Validation Loss: 1.0629, Validation Accuracy: 53.00%
Epoch 13/100, Training Loss: 1.0602, Training Accuracy: 52.39%, Validation Loss: 1.0395, Validation Accuracy: 51.40%
Epoch 14/100, Training Loss: 1.0556, Training Accuracy: 51.30%, Validation Loss: 1.0502, Validation Accuracy: 52.00%
Epoch 15/100, Training Loss: 1.0433, Training Accuracy: 52.72%, Validation Loss: 1.0461, Validation Accuracy: 52.80%
Epoch 16/100, Training Loss: 1.0297, Training Accuracy: 52.48%, Validation Loss: 0.9923, Validation Accuracy: 53.00%
Epoch 17/100, Training Loss: 1.0252, Training Accuracy: 53.10%, Validation Loss: 1.0125, Validation Accuracy: 53.60%
Epoch 18/100, Training Loss: 0.9988, Training Accuracy: 53.03%, Validation Loss: 0.9862, Validation Accuracy: 52.60%
Epoch 19/100, Training Loss: 1.0133, Training Accuracy: 52.68%, Validation Loss: 1.0597, Validation Accuracy: 48.40%
Epoch 20/100, Training Loss: 1.0142, Training Accuracy: 52.59%, Validation Loss: 0.9562, Validation Accuracy: 51.60%
Epoch 21/100, Training Loss: 0.9893, Training Accuracy: 53.17%, Validation Loss: 0.9755, Validation Accuracy: 52.00%
Epoch 22/100, Training Loss: 0.9874, Training Accuracy: 53.30%, Validation Loss: 1.0098, Validation Accuracy: 50.20%
Epoch 23/100, Training Loss: 0.9680, Training Accuracy: 54.01%, Validation Loss: 0.9432, Validation Accuracy: 53.00%
Epoch 24/100, Training Loss: 0.9562, Training Accuracy: 53.37%, Validation Loss: 0.9672, Validation Accuracy: 53.20%
Epoch 25/100, Training Loss: 0.9609, Training Accuracy: 52.99%, Validation Loss: 0.9250, Validation Accuracy: 53.60%
Epoch 26/100, Training Loss: 0.9412, Training Accuracy: 53.39%, Validation Loss: 0.9778, Validation Accuracy: 54.40%
Epoch 27/100, Training Loss: 0.9977, Training Accuracy: 53.01%, Validation Loss: 0.9228, Validation Accuracy: 54.20%
Epoch 28/100, Training Loss: 0.9586, Training Accuracy: 52.88%, Validation Loss: 0.9370, Validation Accuracy: 55.20%
Epoch 29/100, Training Loss: 0.9542, Training Accuracy: 52.77%, Validation Loss: 0.9905, Validation Accuracy: 51.40%
Epoch 30/100, Training Loss: 0.9583, Training Accuracy: 54.01%, Validation Loss: 0.9395, Validation Accuracy: 55.80%
Epoch 31/100, Training Loss: 0.9585, Training Accuracy: 52.41%, Validation Loss: 0.9209, Validation Accuracy: 56.40%
Epoch 32/100, Training Loss: 0.9380, Training Accuracy: 53.43%, Validation Loss: 0.9834, Validation Accuracy: 52.80%
Epoch 33/100, Training Loss: 0.9384, Training Accuracy: 54.19%, Validation Loss: 0.9135, Validation Accuracy: 54.20%
Epoch 34/100, Training Loss: 0.9209, Training Accuracy: 54.48%, Validation Loss: 0.8894, Validation Accuracy: 57.00%
Epoch 35/100, Training Loss: 0.9174, Training Accuracy: 54.77%, Validation Loss: 0.9358, Validation Accuracy: 53.40%
Epoch 36/100, Training Loss: 0.9321, Training Accuracy: 53.68%, Validation Loss: 0.9485, Validation Accuracy: 55.20%
Epoch 37/100, Training Loss: 0.9253, Training Accuracy: 53.35%, Validation Loss: 0.9269, Validation Accuracy: 54.80%
Epoch 38/100, Training Loss: 0.9186, Training Accuracy: 54.57%, Validation Loss: 0.9344, Validation Accuracy: 53.80%
Epoch 39/100, Training Loss: 0.9352, Training Accuracy: 53.70%, Validation Loss: 0.9324, Validation Accuracy: 55.40%
Epoch 40/100, Training Loss: 0.9056, Training Accuracy: 54.03%, Validation Loss: 0.9062, Validation Accuracy: 54.20%
Epoch 41/100, Training Loss: 0.9394, Training Accuracy: 54.03%, Validation Loss: 0.9433, Validation Accuracy: 52.60%
Epoch 42/100, Training Loss: 0.9684, Training Accuracy: 53.52%, Validation Loss: 0.9517, Validation Accuracy: 51.60%
Epoch 43/100, Training Loss: 0.9815, Training Accuracy: 53.06%, Validation Loss: 0.9647, Validation Accuracy: 54.80%
Epoch 44/100, Training Loss: 0.9471, Training Accuracy: 52.37%, Validation Loss: 0.8952, Validation Accuracy: 57.80%
Epoch 45/100, Training Loss: 0.9497, Training Accuracy: 53.50%, Validation Loss: 0.9739, Validation Accuracy: 53.80%
Epoch 46/100, Training Loss: 0.9216, Training Accuracy: 54.59%, Validation Loss: 0.9285, Validation Accuracy: 54.20%
Epoch 47/100, Training Loss: 0.9084, Training Accuracy: 54.66%, Validation Loss: 0.9192, Validation Accuracy: 53.00%
Epoch 48/100, Training Loss: 0.9167, Training Accuracy: 53.23%, Validation Loss: 0.9019, Validation Accuracy: 56.20%
Epoch 49/100, Training Loss: 0.9048, Training Accuracy: 54.10%, Validation Loss: 0.9679, Validation Accuracy: 52.00%
Epoch 50/100, Training Loss: 0.8948, Training Accuracy: 54.37%, Validation Loss: 0.9160, Validation Accuracy: 54.60%
Epoch 51/100, Training Loss: 0.8991, Training Accuracy: 54.46%, Validation Loss: 0.9103, Validation Accuracy: 56.20%
Epoch 52/100, Training Loss: 1.3040, Training Accuracy: 37.88%, Validation Loss: 1.3621, Validation Accuracy: 39.40%
Epoch 53/100, Training Loss: 1.3152, Training Accuracy: 40.45%, Validation Loss: 1.2855, Validation Accuracy: 38.00%
Epoch 54/100, Training Loss: 1.2729, Training Accuracy: 40.48%, Validation Loss: 1.3084, Validation Accuracy: 38.80%
Epoch 55/100, Training Loss: 1.2569, Training Accuracy: 43.48%, Validation Loss: 1.3015, Validation Accuracy: 37.60%
Epoch 56/100, Training Loss: 1.2550, Training Accuracy: 43.32%, Validation Loss: 1.2390, Validation Accuracy: 44.20%
Epoch 57/100, Training Loss: 1.2217, Training Accuracy: 45.05%, Validation Loss: 1.2404, Validation Accuracy: 45.20%
Epoch 58/100, Training Loss: 1.2117, Training Accuracy: 45.48%, Validation Loss: 1.2249, Validation Accuracy: 45.20%
Epoch 59/100, Training Loss: 1.2123, Training Accuracy: 46.03%, Validation Loss: 1.2664, Validation Accuracy: 46.00%
Epoch 60/100, Training Loss: 1.2020, Training Accuracy: 45.79%, Validation Loss: 1.1848, Validation Accuracy: 50.40%
Epoch 61/100, Training Loss: 1.1712, Training Accuracy: 48.86%, Validation Loss: 1.1632, Validation Accuracy: 49.40%
Epoch 62/100, Training Loss: 1.1750, Training Accuracy: 47.83%, Validation Loss: 1.2111, Validation Accuracy: 47.00%
Epoch 63/100, Training Loss: 1.1728, Training Accuracy: 48.41%, Validation Loss: 1.2117, Validation Accuracy: 49.00%
Epoch 64/100, Training Loss: 1.1831, Training Accuracy: 46.97%, Validation Loss: 1.1886, Validation Accuracy: 47.40%
Epoch 65/100, Training Loss: 1.1690, Training Accuracy: 47.17%, Validation Loss: 1.1450, Validation Accuracy: 48.20%
Epoch 66/100, Training Loss: 1.1392, Training Accuracy: 49.39%, Validation Loss: 1.1370, Validation Accuracy: 49.40%
Epoch 67/100, Training Loss: 1.1370, Training Accuracy: 48.99%, Validation Loss: 1.1223, Validation Accuracy: 49.80%
Epoch 68/100, Training Loss: 1.1495, Training Accuracy: 49.12%, Validation Loss: 1.1515, Validation Accuracy: 46.20%
Epoch 69/100, Training Loss: 1.1444, Training Accuracy: 47.83%, Validation Loss: 1.1267, Validation Accuracy: 52.60%
Epoch 70/100, Training Loss: 1.1313, Training Accuracy: 49.17%, Validation Loss: 1.1198, Validation Accuracy: 51.00%
Epoch 71/100, Training Loss: 1.1564, Training Accuracy: 48.39%, Validation Loss: 1.1363, Validation Accuracy: 50.00%
Epoch 72/100, Training Loss: 1.1332, Training Accuracy: 49.10%, Validation Loss: 1.1612, Validation Accuracy: 49.00%
Epoch 73/100, Training Loss: 1.1412, Training Accuracy: 49.50%, Validation Loss: 1.1623, Validation Accuracy: 45.20%
Epoch 74/100, Training Loss: 1.1397, Training Accuracy: 48.88%, Validation Loss: 1.1381, Validation Accuracy: 50.00%
Epoch 75/100, Training Loss: 1.1312, Training Accuracy: 48.43%, Validation Loss: 1.1281, Validation Accuracy: 47.80%
Epoch 76/100, Training Loss: 1.1266, Training Accuracy: 49.19%, Validation Loss: 1.1367, Validation Accuracy: 48.40%
Epoch 77/100, Training Loss: 1.1320, Training Accuracy: 49.66%, Validation Loss: 1.1099, Validation Accuracy: 49.20%
Epoch 78/100, Training Loss: 1.1226, Training Accuracy: 50.06%, Validation Loss: 1.1173, Validation Accuracy: 49.40%
Epoch 79/100, Training Loss: 1.1364, Training Accuracy: 48.72%, Validation Loss: 1.1343, Validation Accuracy: 50.00%
Epoch 80/100, Training Loss: 1.1310, Training Accuracy: 49.99%, Validation Loss: 1.1138, Validation Accuracy: 51.00%
Epoch 81/100, Training Loss: 1.1286, Training Accuracy: 49.72%, Validation Loss: 1.1131, Validation Accuracy: 52.20%
Epoch 82/100, Training Loss: 1.1445, Training Accuracy: 48.01%, Validation Loss: 1.1424, Validation Accuracy: 50.60%
Epoch 83/100, Training Loss: 1.1285, Training Accuracy: 49.57%, Validation Loss: 1.1325, Validation Accuracy: 50.40%
Epoch 84/100, Training Loss: 1.1304, Training Accuracy: 49.43%, Validation Loss: 1.1279, Validation Accuracy: 51.80%
Epoch 85/100, Training Loss: 1.1387, Training Accuracy: 47.70%, Validation Loss: 1.1241, Validation Accuracy: 51.00%
Epoch 86/100, Training Loss: 1.1556, Training Accuracy: 48.94%, Validation Loss: 1.1047, Validation Accuracy: 51.40%
Epoch 87/100, Training Loss: 1.1288, Training Accuracy: 49.26%, Validation Loss: 1.1048, Validation Accuracy: 50.60%
Epoch 88/100, Training Loss: 1.1308, Training Accuracy: 49.12%, Validation Loss: 1.1237, Validation Accuracy: 46.20%
Epoch 89/100, Training Loss: 1.1254, Training Accuracy: 50.79%, Validation Loss: 1.0995, Validation Accuracy: 51.80%
Epoch 90/100, Training Loss: 1.1216, Training Accuracy: 50.61%, Validation Loss: 1.0981, Validation Accuracy: 53.00%
Epoch 91/100, Training Loss: 1.1129, Training Accuracy: 49.43%, Validation Loss: 1.1197, Validation Accuracy: 50.20%
Epoch 92/100, Training Loss: 1.1168, Training Accuracy: 50.03%, Validation Loss: 1.1109, Validation Accuracy: 51.20%
Epoch 93/100, Training Loss: 1.1164, Training Accuracy: 49.97%, Validation Loss: 1.1021, Validation Accuracy: 49.40%
Epoch 94/100, Training Loss: 1.1211, Training Accuracy: 49.77%, Validation Loss: 1.1004, Validation Accuracy: 52.20%
Epoch 95/100, Training Loss: 1.1142, Training Accuracy: 50.12%, Validation Loss: 1.0981, Validation Accuracy: 52.40%
Epoch 96/100, Training Loss: 1.1130, Training Accuracy: 49.43%, Validation Loss: 1.1122, Validation Accuracy: 49.00%
Epoch 97/100, Training Loss: 1.1287, Training Accuracy: 49.14%, Validation Loss: 1.0926, Validation Accuracy: 51.60%
Epoch 98/100, Training Loss: 1.1125, Training Accuracy: 49.52%, Validation Loss: 1.0997, Validation Accuracy: 50.80%
Epoch 99/100, Training Loss: 1.1023, Training Accuracy: 50.30%, Validation Loss: 1.0905, Validation Accuracy: 52.80%
Epoch 100/100, Training Loss: 1.1122, Training Accuracy: 50.12%, Validation Loss: 1.1131, Validation Accuracy: 51.20%

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 7/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

In [ ]: # Run and plot the results of the CNN model


training_losses, validation_losses, training_accuracies, validation_accuracies = train_and_validate_model(
model=cnn_model,
trainloader=trainloader,
testloader=testloader,
criterion=cnn_criterion,
optimizer=cnn_optimizer,
epochs=100,
input_transform=add_channel_dimension # This function will add the necessary channel dimension for CNN inputs
)

# Plotting the results


plot_training_validation_loss_accuracy(training_losses, validation_losses, training_accuracies, validation_accuracies)

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 8/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

Epoch 1/100, Training Loss: 1.3913, Training Accuracy: 25.03%, Validation Loss: 1.3990, Validation Accuracy: 20.40%
Epoch 2/100, Training Loss: 1.3908, Training Accuracy: 25.03%, Validation Loss: 1.3958, Validation Accuracy: 20.40%
Epoch 3/100, Training Loss: 1.3881, Training Accuracy: 25.03%, Validation Loss: 1.3936, Validation Accuracy: 20.40%
Epoch 4/100, Training Loss: 1.3866, Training Accuracy: 25.03%, Validation Loss: 1.3917, Validation Accuracy: 20.40%
Epoch 5/100, Training Loss: 1.3858, Training Accuracy: 25.03%, Validation Loss: 1.3898, Validation Accuracy: 20.40%
Epoch 6/100, Training Loss: 1.3845, Training Accuracy: 25.03%, Validation Loss: 1.3879, Validation Accuracy: 20.40%
Epoch 7/100, Training Loss: 1.3835, Training Accuracy: 25.03%, Validation Loss: 1.3861, Validation Accuracy: 20.40%
Epoch 8/100, Training Loss: 1.3822, Training Accuracy: 25.03%, Validation Loss: 1.3844, Validation Accuracy: 20.40%
Epoch 9/100, Training Loss: 1.3799, Training Accuracy: 25.03%, Validation Loss: 1.3830, Validation Accuracy: 20.40%
Epoch 10/100, Training Loss: 1.3790, Training Accuracy: 25.03%, Validation Loss: 1.3813, Validation Accuracy: 20.40%
Epoch 11/100, Training Loss: 1.3773, Training Accuracy: 25.49%, Validation Loss: 1.3792, Validation Accuracy: 24.80%
Epoch 12/100, Training Loss: 1.3756, Training Accuracy: 35.67%, Validation Loss: 1.3774, Validation Accuracy: 40.00%
Epoch 13/100, Training Loss: 1.3736, Training Accuracy: 43.65%, Validation Loss: 1.3755, Validation Accuracy: 44.20%
Epoch 14/100, Training Loss: 1.3716, Training Accuracy: 45.81%, Validation Loss: 1.3730, Validation Accuracy: 47.40%
Epoch 15/100, Training Loss: 1.3693, Training Accuracy: 47.32%, Validation Loss: 1.3702, Validation Accuracy: 49.80%
Epoch 16/100, Training Loss: 1.3669, Training Accuracy: 48.99%, Validation Loss: 1.3673, Validation Accuracy: 50.20%
Epoch 17/100, Training Loss: 1.3634, Training Accuracy: 49.39%, Validation Loss: 1.3640, Validation Accuracy: 49.80%
Epoch 18/100, Training Loss: 1.3603, Training Accuracy: 50.12%, Validation Loss: 1.3605, Validation Accuracy: 50.20%
Epoch 19/100, Training Loss: 1.3569, Training Accuracy: 50.26%, Validation Loss: 1.3567, Validation Accuracy: 50.60%
Epoch 20/100, Training Loss: 1.3525, Training Accuracy: 50.74%, Validation Loss: 1.3524, Validation Accuracy: 51.00%
Epoch 21/100, Training Loss: 1.3491, Training Accuracy: 50.90%, Validation Loss: 1.3473, Validation Accuracy: 51.20%
Epoch 22/100, Training Loss: 1.3428, Training Accuracy: 51.03%, Validation Loss: 1.3415, Validation Accuracy: 51.60%
Epoch 23/100, Training Loss: 1.3378, Training Accuracy: 51.21%, Validation Loss: 1.3347, Validation Accuracy: 52.60%
Epoch 24/100, Training Loss: 1.3311, Training Accuracy: 51.37%, Validation Loss: 1.3275, Validation Accuracy: 52.80%
Epoch 25/100, Training Loss: 1.3242, Training Accuracy: 51.39%, Validation Loss: 1.3196, Validation Accuracy: 52.80%
Epoch 26/100, Training Loss: 1.3155, Training Accuracy: 51.57%, Validation Loss: 1.3105, Validation Accuracy: 52.60%
Epoch 27/100, Training Loss: 1.3052, Training Accuracy: 51.70%, Validation Loss: 1.3003, Validation Accuracy: 53.00%
Epoch 28/100, Training Loss: 1.2979, Training Accuracy: 51.68%, Validation Loss: 1.2893, Validation Accuracy: 53.00%
Epoch 29/100, Training Loss: 1.2866, Training Accuracy: 51.79%, Validation Loss: 1.2776, Validation Accuracy: 53.40%
Epoch 30/100, Training Loss: 1.2736, Training Accuracy: 51.86%, Validation Loss: 1.2648, Validation Accuracy: 53.60%
Epoch 31/100, Training Loss: 1.2618, Training Accuracy: 51.92%, Validation Loss: 1.2516, Validation Accuracy: 53.80%
Epoch 32/100, Training Loss: 1.2466, Training Accuracy: 51.92%, Validation Loss: 1.2377, Validation Accuracy: 53.80%
Epoch 33/100, Training Loss: 1.2341, Training Accuracy: 51.97%, Validation Loss: 1.2237, Validation Accuracy: 53.80%
Epoch 34/100, Training Loss: 1.2262, Training Accuracy: 52.12%, Validation Loss: 1.2120, Validation Accuracy: 54.00%
Epoch 35/100, Training Loss: 1.2165, Training Accuracy: 52.21%, Validation Loss: 1.2008, Validation Accuracy: 54.00%
Epoch 36/100, Training Loss: 1.2013, Training Accuracy: 52.17%, Validation Loss: 1.1907, Validation Accuracy: 54.40%
Epoch 37/100, Training Loss: 1.1961, Training Accuracy: 52.06%, Validation Loss: 1.1827, Validation Accuracy: 54.00%
Epoch 38/100, Training Loss: 1.1911, Training Accuracy: 52.06%, Validation Loss: 1.1759, Validation Accuracy: 53.80%
Epoch 39/100, Training Loss: 1.1808, Training Accuracy: 51.97%, Validation Loss: 1.1703, Validation Accuracy: 53.00%
Epoch 40/100, Training Loss: 1.1816, Training Accuracy: 51.72%, Validation Loss: 1.1659, Validation Accuracy: 52.40%
Epoch 41/100, Training Loss: 1.1728, Training Accuracy: 51.43%, Validation Loss: 1.1611, Validation Accuracy: 52.40%
Epoch 42/100, Training Loss: 1.1678, Training Accuracy: 51.30%, Validation Loss: 1.1578, Validation Accuracy: 52.60%
Epoch 43/100, Training Loss: 1.1673, Training Accuracy: 51.23%, Validation Loss: 1.1542, Validation Accuracy: 52.80%
Epoch 44/100, Training Loss: 1.1637, Training Accuracy: 51.30%, Validation Loss: 1.1514, Validation Accuracy: 52.80%
Epoch 45/100, Training Loss: 1.1540, Training Accuracy: 51.34%, Validation Loss: 1.1483, Validation Accuracy: 52.40%
Epoch 46/100, Training Loss: 1.1596, Training Accuracy: 51.39%, Validation Loss: 1.1463, Validation Accuracy: 52.60%
Epoch 47/100, Training Loss: 1.1568, Training Accuracy: 51.28%, Validation Loss: 1.1448, Validation Accuracy: 52.20%
Epoch 48/100, Training Loss: 1.1527, Training Accuracy: 51.17%, Validation Loss: 1.1419, Validation Accuracy: 53.20%
Epoch 49/100, Training Loss: 1.1474, Training Accuracy: 51.14%, Validation Loss: 1.1403, Validation Accuracy: 53.00%
Epoch 50/100, Training Loss: 1.1522, Training Accuracy: 50.92%, Validation Loss: 1.1395, Validation Accuracy: 52.80%
Epoch 51/100, Training Loss: 1.1485, Training Accuracy: 51.01%, Validation Loss: 1.1374, Validation Accuracy: 52.60%
Epoch 52/100, Training Loss: 1.1451, Training Accuracy: 50.99%, Validation Loss: 1.1359, Validation Accuracy: 52.40%
Epoch 53/100, Training Loss: 1.1453, Training Accuracy: 50.83%, Validation Loss: 1.1341, Validation Accuracy: 52.60%
Epoch 54/100, Training Loss: 1.1418, Training Accuracy: 51.01%, Validation Loss: 1.1328, Validation Accuracy: 52.60%
Epoch 55/100, Training Loss: 1.1367, Training Accuracy: 50.81%, Validation Loss: 1.1311, Validation Accuracy: 52.60%
Epoch 56/100, Training Loss: 1.1387, Training Accuracy: 51.08%, Validation Loss: 1.1295, Validation Accuracy: 53.40%
Epoch 57/100, Training Loss: 1.1386, Training Accuracy: 51.34%, Validation Loss: 1.1278, Validation Accuracy: 53.20%
Epoch 58/100, Training Loss: 1.1324, Training Accuracy: 51.26%, Validation Loss: 1.1255, Validation Accuracy: 54.00%
Epoch 59/100, Training Loss: 1.1358, Training Accuracy: 51.41%, Validation Loss: 1.1252, Validation Accuracy: 53.40%
Epoch 60/100, Training Loss: 1.1306, Training Accuracy: 51.50%, Validation Loss: 1.1233, Validation Accuracy: 54.20%
Epoch 61/100, Training Loss: 1.1316, Training Accuracy: 51.43%, Validation Loss: 1.1209, Validation Accuracy: 54.40%
Epoch 62/100, Training Loss: 1.1269, Training Accuracy: 51.63%, Validation Loss: 1.1192, Validation Accuracy: 54.40%
Epoch 63/100, Training Loss: 1.1240, Training Accuracy: 51.70%, Validation Loss: 1.1182, Validation Accuracy: 54.40%
Epoch 64/100, Training Loss: 1.1251, Training Accuracy: 51.57%, Validation Loss: 1.1166, Validation Accuracy: 54.60%
Epoch 65/100, Training Loss: 1.1208, Training Accuracy: 51.63%, Validation Loss: 1.1134, Validation Accuracy: 54.40%
Epoch 66/100, Training Loss: 1.1206, Training Accuracy: 51.83%, Validation Loss: 1.1112, Validation Accuracy: 54.40%
Epoch 67/100, Training Loss: 1.1169, Training Accuracy: 51.83%, Validation Loss: 1.1090, Validation Accuracy: 54.60%
Epoch 68/100, Training Loss: 1.1153, Training Accuracy: 51.86%, Validation Loss: 1.1050, Validation Accuracy: 54.20%
Epoch 69/100, Training Loss: 1.1101, Training Accuracy: 51.86%, Validation Loss: 1.1014, Validation Accuracy: 53.60%
Epoch 70/100, Training Loss: 1.1099, Training Accuracy: 51.90%, Validation Loss: 1.0978, Validation Accuracy: 54.00%
Epoch 71/100, Training Loss: 1.1016, Training Accuracy: 51.86%, Validation Loss: 1.0940, Validation Accuracy: 54.00%
Epoch 72/100, Training Loss: 1.0982, Training Accuracy: 51.88%, Validation Loss: 1.0907, Validation Accuracy: 54.20%
Epoch 73/100, Training Loss: 1.0967, Training Accuracy: 51.66%, Validation Loss: 1.0858, Validation Accuracy: 54.40%
Epoch 74/100, Training Loss: 1.0911, Training Accuracy: 51.81%, Validation Loss: 1.0807, Validation Accuracy: 54.60%
Epoch 75/100, Training Loss: 1.0845, Training Accuracy: 51.99%, Validation Loss: 1.0738, Validation Accuracy: 54.80%
Epoch 76/100, Training Loss: 1.0782, Training Accuracy: 51.86%, Validation Loss: 1.0671, Validation Accuracy: 54.20%
Epoch 77/100, Training Loss: 1.0688, Training Accuracy: 52.19%, Validation Loss: 1.0609, Validation Accuracy: 53.20%
Epoch 78/100, Training Loss: 1.0641, Training Accuracy: 52.23%, Validation Loss: 1.0538, Validation Accuracy: 52.80%
Epoch 79/100, Training Loss: 1.0532, Training Accuracy: 52.37%, Validation Loss: 1.0476, Validation Accuracy: 51.60%
Epoch 80/100, Training Loss: 1.0516, Training Accuracy: 52.46%, Validation Loss: 1.0386, Validation Accuracy: 51.80%
Epoch 81/100, Training Loss: 1.0384, Training Accuracy: 52.50%, Validation Loss: 1.0308, Validation Accuracy: 52.20%
Epoch 82/100, Training Loss: 1.0351, Training Accuracy: 52.66%, Validation Loss: 1.0241, Validation Accuracy: 51.40%
Epoch 83/100, Training Loss: 1.0281, Training Accuracy: 52.50%, Validation Loss: 1.0140, Validation Accuracy: 53.00%
Epoch 84/100, Training Loss: 1.0239, Training Accuracy: 52.81%, Validation Loss: 1.0076, Validation Accuracy: 52.40%
Epoch 85/100, Training Loss: 1.0177, Training Accuracy: 52.83%, Validation Loss: 1.0026, Validation Accuracy: 52.20%
Epoch 86/100, Training Loss: 1.0049, Training Accuracy: 52.70%, Validation Loss: 0.9962, Validation Accuracy: 52.20%
Epoch 87/100, Training Loss: 1.0001, Training Accuracy: 52.83%, Validation Loss: 0.9904, Validation Accuracy: 52.00%
Epoch 88/100, Training Loss: 0.9981, Training Accuracy: 52.86%, Validation Loss: 0.9858, Validation Accuracy: 52.00%
Epoch 89/100, Training Loss: 0.9921, Training Accuracy: 52.83%, Validation Loss: 0.9791, Validation Accuracy: 52.80%
Epoch 90/100, Training Loss: 0.9848, Training Accuracy: 53.10%, Validation Loss: 0.9737, Validation Accuracy: 52.80%
Epoch 91/100, Training Loss: 0.9837, Training Accuracy: 52.99%, Validation Loss: 0.9725, Validation Accuracy: 53.00%
Epoch 92/100, Training Loss: 0.9768, Training Accuracy: 52.90%, Validation Loss: 0.9710, Validation Accuracy: 53.80%
Epoch 93/100, Training Loss: 0.9770, Training Accuracy: 52.81%, Validation Loss: 0.9630, Validation Accuracy: 53.20%
Epoch 94/100, Training Loss: 0.9740, Training Accuracy: 53.08%, Validation Loss: 0.9604, Validation Accuracy: 53.40%
Epoch 95/100, Training Loss: 0.9722, Training Accuracy: 53.30%, Validation Loss: 0.9590, Validation Accuracy: 53.80%
Epoch 96/100, Training Loss: 0.9684, Training Accuracy: 53.01%, Validation Loss: 0.9552, Validation Accuracy: 53.40%
Epoch 97/100, Training Loss: 0.9689, Training Accuracy: 53.17%, Validation Loss: 0.9537, Validation Accuracy: 54.20%
Epoch 98/100, Training Loss: 0.9622, Training Accuracy: 53.26%, Validation Loss: 0.9487, Validation Accuracy: 53.40%
Epoch 99/100, Training Loss: 0.9649, Training Accuracy: 53.19%, Validation Loss: 0.9513, Validation Accuracy: 54.00%
Epoch 100/100, Training Loss: 0.9584, Training Accuracy: 53.01%, Validation Loss: 0.9475, Validation Accuracy: 54.20%

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 9/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

In [ ]: # Run and plot the results of the LSTM model


training_losses, validation_losses, training_accuracies, validation_accuracies = train_and_validate_model(
model=lstm_model,
trainloader=trainloader,
testloader=testloader,
criterion=lstm_criterion,
optimizer=lstm_optimizer,
epochs=100,
input_transform=ensure_input_shape_for_lstm # Specific to LSTM model requirements
)

# Plotting the results for LSTM


plot_training_validation_loss_accuracy(training_losses, validation_losses, training_accuracies, validation_accuracies)

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 10/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

Epoch 1/100, Training Loss: 1.3031, Training Accuracy: 39.59%, Validation Loss: 1.2289, Validation Accuracy: 49.20%
Epoch 2/100, Training Loss: 1.1905, Training Accuracy: 50.08%, Validation Loss: 1.1630, Validation Accuracy: 52.40%
Epoch 3/100, Training Loss: 1.1510, Training Accuracy: 49.39%, Validation Loss: 1.1197, Validation Accuracy: 51.00%
Epoch 4/100, Training Loss: 1.1077, Training Accuracy: 50.48%, Validation Loss: 1.0636, Validation Accuracy: 47.80%
Epoch 5/100, Training Loss: 1.1131, Training Accuracy: 50.39%, Validation Loss: 1.0926, Validation Accuracy: 51.60%
Epoch 6/100, Training Loss: 1.1113, Training Accuracy: 50.17%, Validation Loss: 1.0890, Validation Accuracy: 54.60%
Epoch 7/100, Training Loss: 1.0778, Training Accuracy: 50.77%, Validation Loss: 1.0695, Validation Accuracy: 48.60%
Epoch 8/100, Training Loss: 1.0715, Training Accuracy: 50.50%, Validation Loss: 1.0387, Validation Accuracy: 52.60%
Epoch 9/100, Training Loss: 1.0477, Training Accuracy: 51.97%, Validation Loss: 1.0774, Validation Accuracy: 51.00%
Epoch 10/100, Training Loss: 1.0630, Training Accuracy: 50.90%, Validation Loss: 1.0403, Validation Accuracy: 51.20%
Epoch 11/100, Training Loss: 1.0522, Training Accuracy: 52.26%, Validation Loss: 1.0151, Validation Accuracy: 53.80%
Epoch 12/100, Training Loss: 1.0456, Training Accuracy: 51.86%, Validation Loss: 1.0144, Validation Accuracy: 53.40%
Epoch 13/100, Training Loss: 1.0154, Training Accuracy: 52.34%, Validation Loss: 1.0208, Validation Accuracy: 53.00%
Epoch 14/100, Training Loss: 1.0152, Training Accuracy: 52.10%, Validation Loss: 1.0389, Validation Accuracy: 53.20%
Epoch 15/100, Training Loss: 1.0425, Training Accuracy: 51.54%, Validation Loss: 1.0365, Validation Accuracy: 53.60%
Epoch 16/100, Training Loss: 1.0039, Training Accuracy: 52.14%, Validation Loss: 1.0403, Validation Accuracy: 49.40%
Epoch 17/100, Training Loss: 0.9764, Training Accuracy: 52.55%, Validation Loss: 1.0060, Validation Accuracy: 51.00%
Epoch 18/100, Training Loss: 0.9776, Training Accuracy: 53.55%, Validation Loss: 0.9809, Validation Accuracy: 52.80%
Epoch 19/100, Training Loss: 0.9676, Training Accuracy: 52.99%, Validation Loss: 1.0158, Validation Accuracy: 51.80%
Epoch 20/100, Training Loss: 0.9655, Training Accuracy: 51.70%, Validation Loss: 0.9895, Validation Accuracy: 50.20%
Epoch 21/100, Training Loss: 0.9622, Training Accuracy: 53.23%, Validation Loss: 1.0167, Validation Accuracy: 50.40%
Epoch 22/100, Training Loss: 0.9687, Training Accuracy: 52.92%, Validation Loss: 0.9766, Validation Accuracy: 54.80%
Epoch 23/100, Training Loss: 0.9312, Training Accuracy: 53.10%, Validation Loss: 0.9663, Validation Accuracy: 56.60%
Epoch 24/100, Training Loss: 0.9454, Training Accuracy: 52.63%, Validation Loss: 0.9566, Validation Accuracy: 55.00%
Epoch 25/100, Training Loss: 0.9252, Training Accuracy: 52.88%, Validation Loss: 1.0216, Validation Accuracy: 49.20%
Epoch 26/100, Training Loss: 0.9341, Training Accuracy: 51.79%, Validation Loss: 0.9293, Validation Accuracy: 54.00%
Epoch 27/100, Training Loss: 0.9317, Training Accuracy: 53.95%, Validation Loss: 0.9647, Validation Accuracy: 51.80%
Epoch 28/100, Training Loss: 0.9198, Training Accuracy: 53.12%, Validation Loss: 0.9482, Validation Accuracy: 51.80%
Epoch 29/100, Training Loss: 0.8967, Training Accuracy: 53.63%, Validation Loss: 0.9737, Validation Accuracy: 52.20%
Epoch 30/100, Training Loss: 0.9123, Training Accuracy: 53.23%, Validation Loss: 0.9675, Validation Accuracy: 53.00%
Epoch 31/100, Training Loss: 0.9109, Training Accuracy: 52.72%, Validation Loss: 0.9455, Validation Accuracy: 54.00%
Epoch 32/100, Training Loss: 0.8912, Training Accuracy: 53.99%, Validation Loss: 0.9473, Validation Accuracy: 52.80%
Epoch 33/100, Training Loss: 0.8786, Training Accuracy: 54.37%, Validation Loss: 0.9380, Validation Accuracy: 52.80%
Epoch 34/100, Training Loss: 0.8830, Training Accuracy: 53.43%, Validation Loss: 0.9175, Validation Accuracy: 53.00%
Epoch 35/100, Training Loss: 0.8867, Training Accuracy: 53.17%, Validation Loss: 0.9317, Validation Accuracy: 53.80%
Epoch 36/100, Training Loss: 0.8639, Training Accuracy: 54.77%, Validation Loss: 0.9496, Validation Accuracy: 53.60%
Epoch 37/100, Training Loss: 0.8705, Training Accuracy: 54.81%, Validation Loss: 0.9483, Validation Accuracy: 51.20%
Epoch 38/100, Training Loss: 0.8857, Training Accuracy: 54.26%, Validation Loss: 0.9170, Validation Accuracy: 52.80%
Epoch 39/100, Training Loss: 0.8647, Training Accuracy: 55.19%, Validation Loss: 0.9175, Validation Accuracy: 51.80%
Epoch 40/100, Training Loss: 0.8759, Training Accuracy: 53.81%, Validation Loss: 0.9568, Validation Accuracy: 53.20%
Epoch 41/100, Training Loss: 0.8834, Training Accuracy: 53.77%, Validation Loss: 0.9099, Validation Accuracy: 52.20%
Epoch 42/100, Training Loss: 0.8546, Training Accuracy: 54.21%, Validation Loss: 0.9425, Validation Accuracy: 51.80%
Epoch 43/100, Training Loss: 0.8516, Training Accuracy: 55.21%, Validation Loss: 0.9166, Validation Accuracy: 52.80%
Epoch 44/100, Training Loss: 0.8347, Training Accuracy: 54.17%, Validation Loss: 0.9094, Validation Accuracy: 53.60%
Epoch 45/100, Training Loss: 0.8382, Training Accuracy: 54.63%, Validation Loss: 0.9265, Validation Accuracy: 51.00%
Epoch 46/100, Training Loss: 0.8459, Training Accuracy: 54.08%, Validation Loss: 0.9340, Validation Accuracy: 50.60%
Epoch 47/100, Training Loss: 0.8282, Training Accuracy: 55.01%, Validation Loss: 0.9249, Validation Accuracy: 51.00%
Epoch 48/100, Training Loss: 0.8300, Training Accuracy: 54.86%, Validation Loss: 0.9302, Validation Accuracy: 51.00%
Epoch 49/100, Training Loss: 0.8232, Training Accuracy: 54.57%, Validation Loss: 0.9229, Validation Accuracy: 50.40%
Epoch 50/100, Training Loss: 0.8348, Training Accuracy: 55.26%, Validation Loss: 0.9839, Validation Accuracy: 52.40%
Epoch 51/100, Training Loss: 0.8169, Training Accuracy: 54.59%, Validation Loss: 0.9262, Validation Accuracy: 53.00%
Epoch 52/100, Training Loss: 0.8209, Training Accuracy: 54.70%, Validation Loss: 0.9284, Validation Accuracy: 52.80%
Epoch 53/100, Training Loss: 0.8318, Training Accuracy: 54.86%, Validation Loss: 0.9670, Validation Accuracy: 53.40%
Epoch 54/100, Training Loss: 0.8822, Training Accuracy: 52.28%, Validation Loss: 0.9169, Validation Accuracy: 52.80%
Epoch 55/100, Training Loss: 0.8279, Training Accuracy: 55.03%, Validation Loss: 0.9080, Validation Accuracy: 52.40%
Epoch 56/100, Training Loss: 0.8095, Training Accuracy: 55.28%, Validation Loss: 0.9255, Validation Accuracy: 51.20%
Epoch 57/100, Training Loss: 0.8277, Training Accuracy: 55.68%, Validation Loss: 0.9367, Validation Accuracy: 52.00%
Epoch 58/100, Training Loss: 0.8129, Training Accuracy: 54.77%, Validation Loss: 0.9359, Validation Accuracy: 51.00%
Epoch 59/100, Training Loss: 0.8045, Training Accuracy: 54.77%, Validation Loss: 0.9684, Validation Accuracy: 50.40%
Epoch 60/100, Training Loss: 0.7947, Training Accuracy: 55.32%, Validation Loss: 0.9650, Validation Accuracy: 51.60%
Epoch 61/100, Training Loss: 0.7894, Training Accuracy: 55.35%, Validation Loss: 0.9470, Validation Accuracy: 49.00%
Epoch 62/100, Training Loss: 0.7850, Training Accuracy: 55.41%, Validation Loss: 0.9354, Validation Accuracy: 51.00%
Epoch 63/100, Training Loss: 0.7824, Training Accuracy: 55.30%, Validation Loss: 0.9747, Validation Accuracy: 52.40%
Epoch 64/100, Training Loss: 0.7761, Training Accuracy: 55.46%, Validation Loss: 0.9793, Validation Accuracy: 50.40%
Epoch 65/100, Training Loss: 0.7797, Training Accuracy: 55.35%, Validation Loss: 0.9388, Validation Accuracy: 52.20%
Epoch 66/100, Training Loss: 0.7931, Training Accuracy: 54.37%, Validation Loss: 0.9756, Validation Accuracy: 53.80%
Epoch 67/100, Training Loss: 0.7953, Training Accuracy: 54.01%, Validation Loss: 0.9611, Validation Accuracy: 49.80%
Epoch 68/100, Training Loss: 0.7732, Training Accuracy: 55.59%, Validation Loss: 0.9821, Validation Accuracy: 47.40%
Epoch 69/100, Training Loss: 0.7701, Training Accuracy: 55.46%, Validation Loss: 1.0115, Validation Accuracy: 50.60%
Epoch 70/100, Training Loss: 0.7597, Training Accuracy: 55.79%, Validation Loss: 0.9848, Validation Accuracy: 49.40%
Epoch 71/100, Training Loss: 0.7757, Training Accuracy: 55.32%, Validation Loss: 1.0024, Validation Accuracy: 49.40%
Epoch 72/100, Training Loss: 0.7707, Training Accuracy: 56.23%, Validation Loss: 0.9740, Validation Accuracy: 48.60%
Epoch 73/100, Training Loss: 0.7838, Training Accuracy: 55.57%, Validation Loss: 1.0615, Validation Accuracy: 46.80%
Epoch 74/100, Training Loss: 0.7781, Training Accuracy: 55.72%, Validation Loss: 1.0316, Validation Accuracy: 51.00%
Epoch 75/100, Training Loss: 0.7555, Training Accuracy: 56.23%, Validation Loss: 1.0172, Validation Accuracy: 48.40%
Epoch 76/100, Training Loss: 0.7569, Training Accuracy: 55.86%, Validation Loss: 1.0639, Validation Accuracy: 48.80%
Epoch 77/100, Training Loss: 0.7662, Training Accuracy: 55.77%, Validation Loss: 0.9889, Validation Accuracy: 49.40%
Epoch 78/100, Training Loss: 0.7457, Training Accuracy: 55.83%, Validation Loss: 1.0631, Validation Accuracy: 49.40%
Epoch 79/100, Training Loss: 0.7563, Training Accuracy: 56.01%, Validation Loss: 1.0076, Validation Accuracy: 48.00%
Epoch 80/100, Training Loss: 0.7461, Training Accuracy: 56.88%, Validation Loss: 1.0164, Validation Accuracy: 48.60%
Epoch 81/100, Training Loss: 0.7577, Training Accuracy: 56.12%, Validation Loss: 1.0709, Validation Accuracy: 50.80%
Epoch 82/100, Training Loss: 0.7607, Training Accuracy: 55.39%, Validation Loss: 1.0860, Validation Accuracy: 48.20%
Epoch 83/100, Training Loss: 0.7614, Training Accuracy: 55.52%, Validation Loss: 1.0853, Validation Accuracy: 49.40%
Epoch 84/100, Training Loss: 0.7499, Training Accuracy: 56.59%, Validation Loss: 1.0553, Validation Accuracy: 52.00%
Epoch 85/100, Training Loss: 0.7480, Training Accuracy: 55.48%, Validation Loss: 1.0333, Validation Accuracy: 48.60%
Epoch 86/100, Training Loss: 0.7271, Training Accuracy: 56.43%, Validation Loss: 1.0585, Validation Accuracy: 48.20%
Epoch 87/100, Training Loss: 0.7252, Training Accuracy: 55.77%, Validation Loss: 1.0747, Validation Accuracy: 47.60%
Epoch 88/100, Training Loss: 0.7376, Training Accuracy: 55.92%, Validation Loss: 1.0971, Validation Accuracy: 53.00%
Epoch 89/100, Training Loss: 0.7460, Training Accuracy: 56.30%, Validation Loss: 1.1481, Validation Accuracy: 47.40%
Epoch 90/100, Training Loss: 0.7566, Training Accuracy: 55.66%, Validation Loss: 1.0788, Validation Accuracy: 49.80%
Epoch 91/100, Training Loss: 0.7490, Training Accuracy: 55.68%, Validation Loss: 1.0414, Validation Accuracy: 48.00%
Epoch 92/100, Training Loss: 0.7320, Training Accuracy: 56.15%, Validation Loss: 1.1465, Validation Accuracy: 48.80%
Epoch 93/100, Training Loss: 0.7206, Training Accuracy: 57.30%, Validation Loss: 1.1022, Validation Accuracy: 46.20%
Epoch 94/100, Training Loss: 0.7363, Training Accuracy: 55.30%, Validation Loss: 1.0950, Validation Accuracy: 49.60%
Epoch 95/100, Training Loss: 0.7494, Training Accuracy: 55.52%, Validation Loss: 1.0881, Validation Accuracy: 47.80%
Epoch 96/100, Training Loss: 0.7257, Training Accuracy: 55.77%, Validation Loss: 1.0787, Validation Accuracy: 46.80%
Epoch 97/100, Training Loss: 0.7303, Training Accuracy: 56.48%, Validation Loss: 1.0944, Validation Accuracy: 46.80%
Epoch 98/100, Training Loss: 0.7397, Training Accuracy: 56.52%, Validation Loss: 1.1392, Validation Accuracy: 46.60%
Epoch 99/100, Training Loss: 0.7290, Training Accuracy: 55.90%, Validation Loss: 1.1009, Validation Accuracy: 50.20%
Epoch 100/100, Training Loss: 0.7208, Training Accuracy: 56.50%, Validation Loss: 1.0607, Validation Accuracy: 49.00%

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 11/12
4/2/24, 8:17 PM medical_text_classifier_GabrieldeOlaguibel

Model Performance Summary


After training four different types of neural network models on the dataset for 100 epochs each, we observed the following best validation accuracies for each model:
Neural Network (NN): Best validation accuracy of 55.80% at epoch 66
Recurrent Neural Network (RNN): Best validation accuracy of 53.80% at epoch 82
Convolutional Neural Network (CNN): Best validation accuracy of 55.40% at epoch 97
Long Short-Term Memory (LSTM): Best validation accuracy of 56.40% at epoch 28

Interpretation
The LSTM model achieved the highest validation accuracy among the four models, indicating that it was the most effective at capturing the patterns within the dataset for this particular task. Its ability to
remember long-term dependencies likely contributed to its superior performance.
The CNN model also performed well, showing that spatial hierarchies of features are relevant for this task. CNNs, being powerful in extracting patterns from spatial data (like images or time-series), indicate
that the dataset's structure can be well-represented using convolutional layers.
The basic Neural Network model showed competitive performance, which suggests that even simple models can capture significant information from the dataset. However, its performance was slightly
lower than the LSTM and CNN models.
The RNN model had the lowest validation accuracy. This might be due to the vanishing gradient problem that RNNs are known to suffer from, making it harder for them to learn long-term dependencies in
the data.

Conclusion
The LSTM model outperformed the other models in terms of validation accuracy, making it the best choice among the ones tested for this particular task. However, the CNN model's close performance
suggests that exploring hybrid models, such as ConvLSTM, which combines the strengths of both CNNs and LSTMs, could potentially offer further improvements.
It's also worth noting that all models performed better than random guessing (which would be 25% accuracy for a four-class problem), indicating that they all managed to learn useful patterns from the
data.

Key Points
LSTM's Superiority: Indicates the importance of capturing long-term dependencies in the dataset.
CNN's Competitive Performance: Suggests that convolutional layers effectively extract spatial or temporal patterns.
Potential for Hybrid Models: Given the strengths of both CNNs and LSTMs, exploring models that combine these architectures could yield better results.
Room for Improvement: While LSTM performed the best, there's still room for improvement. Techniques like hyperparameter tuning, more sophisticated data preprocessing, or using ensemble
methods could enhance model performance further.

file:///Users/gabrieldeolaguibel/Downloads/medical_text_classifier_GabrieldeOlaguibel.html 12/12

You might also like