Notas adicionales:
import torch
import torch.nn as nn
class TextClassifier(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
super().__init__()
# Capa de embedding para mapear Ãndices de palabras a vectores de embeddings
self.embedding = nn.Embedding(vocab_size, embedding_dim)
# Capa LSTM para procesar los embeddings y obtener estados ocultos
self.rnn = nn.LSTM(embedding_dim, hidden_dim, num_layers=2, batch_first=True)
# Capa lineal para proyectar el último estado oculto en la salida final
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, text):
# Obtener los embeddings de las palabras
embedded = self.embedding(text)
# Propagar los embeddings a través de la capa LSTM
output, (hidden, cell) = self.rnn(embedded)
# Seleccionar el último estado oculto como estado final
final_hidden = hidden[-1]
# Pasar el estado final a través de la capa lineal para obtener la salida final
return self.fc(final_hidden)
# Parámetros del modelo
vocab_size = 10000
embedding_dim = 100
hidden_dim = 256
output_dim = 2
# Crear instancia del modelo
model = TextClassifier(vocab_size, embedding_dim, hidden_dim, output_dim)
# Imprimir la estructura del modelo
print(model)
Respuesta esperada:
TextClassifier(
(embedding): Embedding(10000, 100)
(rnn): LSTM(100, 256, num_layers=2, batch_first=True)
(fc): Linear(in_features=256, out_features=2, bias=True)
)
Process finished with exit code 0
Expliquemos el código paso a paso:
-
Se importan las bibliotecas necesarias:
torch
para el uso de PyTorch ytorch.nn
para las capas y funciones de redes neuronales. -
Se define la clase
TextClassifier
, que es una subclase denn.Module
, la cual es la base para definir modelos de PyTorch. -
En el método
__init__
de la claseTextClassifier
, se definen los componentes del modelo. Los parámetros que recibe son:vocab_size:
Tamaño del vocabulario, es decir, la cantidad de palabras únicas en el corpus de texto.embedding_dim:
Dimensión de los vectores de embeddings. Cada palabra será representada por un vector de esta dimensión.hidden_dim:
Dimensión de los estados ocultos de la capa LSTM.output_dim:
Dimensión de la salida del clasificador.- En el cuerpo del método, se definen tres capas:
self.embedding:
Una capa de embedding (nn.Embedding) que mapea cada Ãndice de palabra a un vector de embeddings de tamaño embedding_dim.self.rnn:
Una capa LSTM (nn.LSTM) que recibe los embeddings y produce secuencias de estados ocultos. Tiene num_layers=2 capas LSTM apiladas y batch_first=True indica que la entrada se proporcionará en el formato (batch_size, sequence_length, input_size).self.fc:
Una capa lineal (nn.Linear) que proyecta el último estado oculto de la capa LSTM (hidden_dim) en la dimensión de salida (output_dim).
-
En el método
forward
de la claseTextClassifier
, se define cómo se propagan los datos a través del modelo. El parámetro text representa las secuencias de palabras de entrada.- Primero, los embeddings de las palabras se obtienen utilizando self.embedding y se almacenan en embedded.
- A continuación, embedded se pasa a través de la capa LSTM (self.rnn) y se obtienen output, hidden y cell. output contiene los estados ocultos de todas las palabras de la secuencia, mientras que hidden y cell contienen los estados finales de la capa LSTM.
- El último estado oculto hidden[-1] se selecciona como el estado oculto final y se pasa a través de la capa lineal (self.fc) para obtener la salida final del clasificador.
- La salida final se devuelve.
-
A continuación, se definen los parámetros para construir una instancia del modelo.
vocab_size
se establece en 10000,embedding_dim
en 100,hidden_dim
en 256 youtput_dim
en 2. -
Se crea una instancia del modelo
TextClassifier
utilizando los parámetros definidos. -
Finalmente, se imprime el modelo creado. Esto mostrará la estructura del modelo, incluyendo las capas y sus dimensiones.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?