Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Implementering av ett Grundläggande RNN | Introduktion till RNN:er
Introduktion till RNN:er

bookImplementering av ett Grundläggande RNN

Vi implementerar en grundläggande RNN för att demonstrera hur nätverket bearbetar sekventiell data och gör förutsägelser. Ett litet, dummy dataset används för att visa hur RNN:en lär sig från data och justerar sina vikter.

  • Skapa dummydata: först genererar vi ett litet dataset som består av enkla numeriska sekvenser. Dessa sekvenser används för att träna vår RNN att identifiera mönster i datan;
sequences = np.random.rand(self.num_samples, self.seq_length, input_size).astype(np.float32)
labels = np.zeros(self.num_samples, dtype=np.int64)
  • Bygga RNN-modellen: vi skapar en enkel RNN-arkitektur med ett dolt lager. Indatalagret tar emot data, medan det dolda lagret bearbetar den och skickar utdata till nästa steg. Det sista lagret ger förutsägelsen;
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)
  • Träna RNN: under träningen justerar RNN sina interna vikter genom backpropagation för att minimera förutsägelsefel. Vi använder en förlustfunktion (till exempel medelkvadratfel) för att mäta modellens prestanda;
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()
  • Utvärdera modellen: efter träningen testar vi RNN:ens förmåga att förutsäga framtida datapunkter baserat på de mönster som lärts in från dummydata. Detta hjälper oss att se hur väl modellen har generaliserat;
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} %')
  • Kodexempel: koden som används i detta kapitel kan laddas ner.

Sammanfattningsvis innebär implementering av en grundläggande RNN att förbereda data, definiera arkitekturen, träna modellen och utvärdera dess prestanda. Detta praktiska tillvägagångssätt ger insikt i hur RNN:er kan användas för sekvensförutsägelse.

question mark

I träningsloopen, vilken funktion beräknar gradienterna för förlusten?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 4.55

bookImplementering av ett Grundläggande RNN

Svep för att visa menyn

Vi implementerar en grundläggande RNN för att demonstrera hur nätverket bearbetar sekventiell data och gör förutsägelser. Ett litet, dummy dataset används för att visa hur RNN:en lär sig från data och justerar sina vikter.

  • Skapa dummydata: först genererar vi ett litet dataset som består av enkla numeriska sekvenser. Dessa sekvenser används för att träna vår RNN att identifiera mönster i datan;
sequences = np.random.rand(self.num_samples, self.seq_length, input_size).astype(np.float32)
labels = np.zeros(self.num_samples, dtype=np.int64)
  • Bygga RNN-modellen: vi skapar en enkel RNN-arkitektur med ett dolt lager. Indatalagret tar emot data, medan det dolda lagret bearbetar den och skickar utdata till nästa steg. Det sista lagret ger förutsägelsen;
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)
  • Träna RNN: under träningen justerar RNN sina interna vikter genom backpropagation för att minimera förutsägelsefel. Vi använder en förlustfunktion (till exempel medelkvadratfel) för att mäta modellens prestanda;
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()
  • Utvärdera modellen: efter träningen testar vi RNN:ens förmåga att förutsäga framtida datapunkter baserat på de mönster som lärts in från dummydata. Detta hjälper oss att se hur väl modellen har generaliserat;
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} %')
  • Kodexempel: koden som används i detta kapitel kan laddas ner.

Sammanfattningsvis innebär implementering av en grundläggande RNN att förbereda data, definiera arkitekturen, träna modellen och utvärdera dess prestanda. Detta praktiska tillvägagångssätt ger insikt i hur RNN:er kan användas för sekvensförutsägelse.

question mark

I träningsloopen, vilken funktion beräknar gradienterna för förlusten?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 4
some-alt