Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Implementação de uma RNN Básica | Introdução às RNNs
Introdução às RNNs

bookImplementação de uma RNN Básica

Implementamos uma RNN básica para demonstrar como a rede processa dados sequenciais e faz previsões. Um pequeno conjunto de dados fictício é utilizado para mostrar como a RNN aprende com os dados e ajusta seus pesos.

  • Criação de dados fictícios: primeiro, geramos um pequeno conjunto de dados composto por sequências numéricas simples. Essas sequências serão usadas para treinar nossa RNN a aprender padrões nos dados;
sequences = np.random.rand(self.num_samples, self.seq_length, input_size).astype(np.float32)
labels = np.zeros(self.num_samples, dtype=np.int64)
  • Construção do modelo RNN: criamos uma arquitetura RNN simples com uma camada oculta. A camada de entrada recebe os dados, enquanto a camada oculta os processa e passa a saída para o próximo passo. A camada final fornece a previsão;
self.hidden_size = hidden_size
self.num_layers = num_layers
self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
  • Treinamento da RNN: durante o treinamento, a RNN ajusta seus pesos internos por meio da retropropagação para minimizar os erros de previsão. Utilizaremos uma função de perda (como erro quadrático médio) para medir o desempenho do modelo;
for i, (sequences, labels) in enumerate(dataloader):
    # --- Forward pass ---
    outputs = model(sequences) # Get model predictions (logits)
    loss = criterion(outputs, labels) # Calculate the loss

    # --- Backward pass and optimization ---
    optimizer.zero_grad()   # Clear gradients from the previous iteration
    loss.backward()         # Compute gradients (Backpropagation Through Time happens here)
    optimizer.step()        # Update model parameters based on gradients

    # --- Track metrics ---
    total_loss += loss.item() # Accumulate the loss (loss.item() gets the scalar value)

    # Calculate accuracy for the batch
    _, predicted_classes = torch.max(outputs.data, 1) # Get the index (class) with the highest score
    total_samples += labels.size(0) # Add the number of samples in this batch
    correct_predictions += (predicted_classes == labels).sum().item()
  • Avaliação do modelo: após o treinamento, testamos a capacidade da RNN de prever pontos futuros com base nos padrões aprendidos a partir dos dados fictícios. Isso nos permite verificar o quanto o modelo generalizou;
all_sequences, all_labels = dataset[:]
# Get model predictions for the entire dataset
outputs = model(all_sequences)

# Find the predicted class for each sample
_, predicted = torch.max(outputs.data, 1)

# Calculate total number of samples and correct predictions
total = all_labels.size(0)
correct = (predicted == all_labels).sum().item()

# Print the final accuracy
print(f'Accuracy of the model on the {total} training sequences: {100 * correct / total:.2f} %')
  • Exemplo de código: o código utilizado neste capítulo pode ser baixado.

Em resumo, implementar uma RNN básica envolve preparar os dados, definir a arquitetura, treinar o modelo e avaliar seu desempenho. Essa abordagem prática fornece uma visão de como as RNNs podem ser aplicadas em tarefas de previsão de sequências.

question mark

No loop de treinamento, qual função calcula os gradientes da perda?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 4.55

bookImplementação de uma RNN Básica

Deslize para mostrar o menu

Implementamos uma RNN básica para demonstrar como a rede processa dados sequenciais e faz previsões. Um pequeno conjunto de dados fictício é utilizado para mostrar como a RNN aprende com os dados e ajusta seus pesos.

  • Criação de dados fictícios: primeiro, geramos um pequeno conjunto de dados composto por sequências numéricas simples. Essas sequências serão usadas para treinar nossa RNN a aprender padrões nos dados;
sequences = np.random.rand(self.num_samples, self.seq_length, input_size).astype(np.float32)
labels = np.zeros(self.num_samples, dtype=np.int64)
  • Construção do modelo RNN: criamos uma arquitetura RNN simples com uma camada oculta. A camada de entrada recebe os dados, enquanto a camada oculta os processa e passa a saída para o próximo passo. A camada final fornece a previsão;
self.hidden_size = hidden_size
self.num_layers = num_layers
self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
  • Treinamento da RNN: durante o treinamento, a RNN ajusta seus pesos internos por meio da retropropagação para minimizar os erros de previsão. Utilizaremos uma função de perda (como erro quadrático médio) para medir o desempenho do modelo;
for i, (sequences, labels) in enumerate(dataloader):
    # --- Forward pass ---
    outputs = model(sequences) # Get model predictions (logits)
    loss = criterion(outputs, labels) # Calculate the loss

    # --- Backward pass and optimization ---
    optimizer.zero_grad()   # Clear gradients from the previous iteration
    loss.backward()         # Compute gradients (Backpropagation Through Time happens here)
    optimizer.step()        # Update model parameters based on gradients

    # --- Track metrics ---
    total_loss += loss.item() # Accumulate the loss (loss.item() gets the scalar value)

    # Calculate accuracy for the batch
    _, predicted_classes = torch.max(outputs.data, 1) # Get the index (class) with the highest score
    total_samples += labels.size(0) # Add the number of samples in this batch
    correct_predictions += (predicted_classes == labels).sum().item()
  • Avaliação do modelo: após o treinamento, testamos a capacidade da RNN de prever pontos futuros com base nos padrões aprendidos a partir dos dados fictícios. Isso nos permite verificar o quanto o modelo generalizou;
all_sequences, all_labels = dataset[:]
# Get model predictions for the entire dataset
outputs = model(all_sequences)

# Find the predicted class for each sample
_, predicted = torch.max(outputs.data, 1)

# Calculate total number of samples and correct predictions
total = all_labels.size(0)
correct = (predicted == all_labels).sum().item()

# Print the final accuracy
print(f'Accuracy of the model on the {total} training sequences: {100 * correct / total:.2f} %')
  • Exemplo de código: o código utilizado neste capítulo pode ser baixado.

Em resumo, implementar uma RNN básica envolve preparar os dados, definir a arquitetura, treinar o modelo e avaliar seu desempenho. Essa abordagem prática fornece uma visão de como as RNNs podem ser aplicadas em tarefas de previsão de sequências.

question mark

No loop de treinamento, qual função calcula os gradientes da perda?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 4
some-alt