JETSON NANO - CREA TU PRIMER RED NEURONAL RECURRENTE (RNN)

  Рет қаралды 55

Innova 3D México 2.0

Innova 3D México 2.0

Күн бұрын

Пікірлер: 4
@IN3DMEX2.0
@IN3DMEX2.0 Ай бұрын
#MODELO import torch import torch.nn as nn # Define el dispositivo (CPU o GPU) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") class RNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): # Llama al constructor de la clase padre super(RNN, self).__init__() # Guarda el tamaño de la capa oculta self.hidden_size = hidden_size # Crea la capa RNN self.rnn = nn.RNN(input_size, hidden_size) # Crea la capa densa self.fc = nn.Linear(hidden_size, output_size) def forward(self, input, hidden): # Procesa la entrada por la RNN output, hidden = self.rnn(input, hidden) # Procesa la salida de la RNN por la capa densa output = self.fc(output) # Devuelve la salida y el estado oculto actualizado return output, hidden def init_hidden(self, batch_size): # Inicializa el estado oculto con ceros return torch.zeros(1, self.hidden_size).to(device)
@IN3DMEX2.0
@IN3DMEX2.0 Ай бұрын
#ENTRENAMIENTO import torch import torch.nn as nn from modelo import RNN import torch.optim as optim from torch.utils.data import DataLoader import pandas as pd import nltk import numpy as np import sys import pickle # Importa la librería pickle # Descarga el paquete punkt si no está instalado nltk.download('punkt') nltk.download('stopwords') # Define el dispositivo (CPU o GPU) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # Define los parámetros de la red input_size = 15 # Tamaño de la entrada (por ejemplo, 15 palabras) hidden_size = 120 # Tamaño de la capa oculta output_size = 3 # Tamaño de la salida (por ejemplo, 3 clases) # Crea una instancia de la RNN modelo = RNN(input_size, hidden_size, output_size) # Define el optimizador y la función de pérdida optimizer = optim.Adam(modelo.parameters(), lr=0.001) criterion = nn.NLLLoss() # Define el dataset dataset = pd.read_csv('dataset.csv') # Prepara el dataset frases = dataset['Frase'].tolist() etiquetas = dataset['Etiqueta'].tolist() # Tokeniza las frases tokens = [nltk.word_tokenize(frase) for frase in frases] # Elimina las stop words stop_words = nltk.corpus.stopwords.words('spanish') tokens = [[token for token in frase if token not in stop_words] for frase in tokens] # Stemming stemmer = nltk.stem.PorterStemmer() tokens = [[stemmer.stem(token) for token in frase] for frase in tokens] # Crea el vocabulario y el diccionario de palabras a índices vocabulario = set([token for frase in tokens for token in frase]) vocabulario_a_indice = {token: indice for indice, token in enumerate(vocabulario)} # Agrega las etiquetas al vocabulario etiquetas_unicas = set(etiquetas) for etiqueta in etiquetas_unicas: if etiqueta not in vocabulario_a_indice: vocabulario_a_indice[etiqueta] = len(vocabulario_a_indice) # Crea un diccionario de etiquetas a índices etiquetas_a_indice = {etiqueta: indice for indice, etiqueta in enumerate(etiquetas_unicas)} # Guarda el diccionario vocabulario_a_indice en un archivo with open('vocabulario_a_indice.pkl', 'wb') as f: # Abre el archivo en modo escritura binaria pickle.dump(vocabulario_a_indice, f) # Guarda el diccionario en el archivo datos = [] for i, tokens_frase in enumerate(tokens): # Crea un tensor de tamaño input_size (15 en este caso) vector = torch.zeros(input_size, dtype=torch.float32) # Rellena las frases más cortas con ceros for j, token in enumerate(tokens_frase): if j < input_size: vector[j] = vocabulario_a_indice[token] # Asegúrate de que la etiqueta esté dentro del rango válido etiqueta = etiquetas_a_indice[etiquetas[i]] datos.append((vector, etiqueta)) # Convierte a torch.float32 # Verifica que la lista datos no esté vacía if datos: # Crea un DataLoader dataloader = DataLoader(datos, batch_size=32, shuffle=True) else: # Si la lista datos está vacía, termina la ejecución print("La lista de datos está vacía. Terminando la ejecución.") sys.exit() # Mueve el modelo al dispositivo modelo.to(device) # Entrena la red num_epochs = 20 for epoch in range(num_epochs): for i, (inputs, labels) in enumerate(dataloader): # Inicializa el estado oculto hidden = torch.zeros(1, hidden_size).to(device) # Inicializa con forma 2D # Mueve los datos al dispositivo inputs = inputs.to(device) labels = labels.long().to(device) # Convierte las etiquetas a LongTensor # Calcula la salida y la pérdida outputs, hidden = modelo(inputs, hidden) loss = criterion(outputs, labels) # Actualiza los pesos optimizer.zero_grad() loss.backward() optimizer.step() # Imprime el progreso print(f'Epoch {epoch+1}/{num_epochs}, Batch {i+1}/{len(dataloader)}, Loss: {loss.item():.4f}') # Guarda los pesos del modelo entrenado torch.save(modelo.state_dict(), 'modelo_pesos.pth')
@IN3DMEX2.0
@IN3DMEX2.0 Ай бұрын
#DATASETUP import csv def crear_dataset(): """Crea un dataset de análisis de sentimientos.""" dataset = [] while True: # Solicita al usuario que introduzca una frase frase = input("Introduce una frase (o escribe 'fin' para terminar): ") # Si el usuario escribe 'fin', termina el bucle if frase == 'fin': break # Solicita al usuario que asigne una etiqueta de sentimiento while True: etiqueta = input("Asigna una etiqueta (positivo, negativo, neutral): ") if etiqueta.lower() in ('positivo', 'negativo', 'neutral'): break else: print("Etiqueta inválida. Por favor, introduce 'positivo', 'negativo' o 'neutral'.") # Agrega la frase y la etiqueta al dataset dataset.append([frase, etiqueta]) # Guarda el dataset en un archivo CSV with open('dataset.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['Frase', 'Etiqueta']) writer.writerows(dataset) print("Dataset creado correctamente en 'dataset.csv'") # Llama a la función para crear el dataset crear_dataset()
@IN3DMEX2.0
@IN3DMEX2.0 Ай бұрын
#INFERENCIA import torch import torch.nn as nn from modelo import RNN import nltk import pickle # Importa la librería pickle # Descarga el paquete punkt si no está instalado nltk.download('punkt') nltk.download('stopwords') nltk.download('punkt_tab') # Define el dispositivo (CPU o GPU) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # Define los parámetros de la red input_size = 15 # Tamaño de la entrada (por ejemplo, 10 palabras) hidden_size = 120 # Tamaño de la capa oculta output_size = 3 # Tamaño de la salida (por ejemplo, 3 clases) # Crea una instancia de la RNN modelo = RNN(input_size, hidden_size, output_size) # Carga los pesos del modelo entrenado modelo.load_state_dict(torch.load('modelo_pesos.pth')) # Elimina las stop words stop_words = nltk.corpus.stopwords.words('spanish') # Stemming stemmer = nltk.stem.PorterStemmer() # Mueve el modelo al dispositivo modelo.to(device)
¿Qué es una Red Neuronal? Parte 2 : La Red | DotCSV
11:34
Dot CSV
Рет қаралды 400 М.
How to memorize quickly and remember what you learn
19:25
Platzi
Рет қаралды 2,5 МЛН
快乐总是短暂的!😂 #搞笑夫妻 #爱美食爱生活 #搞笑达人
00:14
朱大帅and依美姐
Рет қаралды 13 МЛН
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 181 МЛН
Hoodie gets wicked makeover! 😲
00:47
Justin Flom
Рет қаралды 138 МЛН
Кто круче, как думаешь?
00:44
МЯТНАЯ ФАНТА
Рет қаралды 6 МЛН
Cómo Aumentar La Producción De Neuronas De Nuestro Cerebro
5:56
Psicoactiva
Рет қаралды 2,3 МЛН
¿Qué es una Red Neuronal?  Parte 1 : La Neurona | DotCSV
9:15
إزاي تاخد شهادة CS50 من هارفارد مجانًا
9:25
غريب الشيخ || Ghareeb Elshaikh
Рет қаралды 16 М.
¡Entendiendo la Encriptación!
9:48
Lesics Española
Рет қаралды 90 М.
El increíble (y olvidado) SISTEMA LINFÁTICO
13:52
La Hiperactina
Рет қаралды 3,9 МЛН
Qué es una red neuronal
15:46
Platzi
Рет қаралды 347 М.
快乐总是短暂的!😂 #搞笑夫妻 #爱美食爱生活 #搞笑达人
00:14
朱大帅and依美姐
Рет қаралды 13 МЛН