Advertisement
Mikestriken

LSTM Model

Feb 27th, 2025
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. import torch
  2. import torch.nn as nn
  3. import torch.utils.data as data
  4. from torchtnt.utils.data import CudaDataPrefetcher
  5. from torchvision import datasets as imageDatasets, transforms as imageTransforms
  6. from ptflops import get_model_complexity_info
  7.  
  8. from sklearn.model_selection import train_test_split
  9. import numpy as np
  10. from sklearn.metrics import precision_score, recall_score, f1_score, confusion_matrix, ConfusionMatrixDisplay
  11.  
  12. import matplotlib
  13. import matplotlib.pyplot as plt
  14.  
  15. import os
  16. from pathlib import Path
  17. import time
  18. import signal
  19. from enum import Enum
  20.  
  21. charset_file_path:Path = Path(__file__).parent / "problem1CharSet.txt"
  22. dataset:str = charset_file_path.read_text(encoding="utf-8")
  23.  
  24. chars = sorted(list(set(dataset)))
  25. ix_to_char = {i: ch for i, ch in enumerate(chars)}
  26. char_to_ix = {ch: i for i, ch in enumerate(chars)}
  27.  
  28. DROPOUT_PROB:float = 0.0
  29. SEQUENCE_LENGTH:int = 10
  30. NUM_CHARS:int = len(chars)
  31.  
  32. class LSTMNet(nn.Module):
  33.     class lstmIndices(Enum):
  34.         OUTPUT = 0
  35.    
  36.     def __init__(self):
  37.         super().__init__()
  38.        
  39.         self.charEmbeddingLayer:nn.Embedding = nn.Embedding(num_embeddings=NUM_CHARS, embedding_dim=128)
  40.        
  41.         self.lstm:nn.LSTM = nn.LSTM(input_size=128, hidden_size=128,
  42.                                     batch_first=True, dropout=DROPOUT_PROB)
  43.        
  44.         self.outputDenseLayer = nn.Sequential(
  45.            
  46.             nn.Linear(in_features=128, out_features=NUM_CHARS),
  47.         )
  48.    
  49.     def forward(self, x):
  50.         # x = self.charEmbeddingLayer(x)
  51.         # x = self.lstm(x)[self.lstmIndices.OUTPUT][:, -1, :]
  52.         # return self.outputDenseLayer(x)
  53.        
  54.         return self.outputDenseLayer(
  55.             self.lstm(
  56.                 self.charEmbeddingLayer(x)
  57.             )[self.lstmIndices.OUTPUT.value][:, -1, :] # next predicted character output at end of sequence
  58.         )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement