Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Perustason RNN:n Toteuttaminen | Johdanto RNN-verkkoihin
Johdanto RNN:iin

bookPerustason RNN:n Toteuttaminen

Toteutamme yksinkertaisen RNN:n havainnollistaaksemme, kuinka verkko käsittelee sekventiaalista dataa ja tekee ennusteita. Käytämme pientä testidataa esitelläksemme, kuinka RNN oppii datasta ja säätää painojaan.

  • Testidatan luominen: ensin generoimme pienen aineiston, joka koostuu yksinkertaisista numeerisista sekvensseistä. Näitä sekvenssejä käytetään RNN:n kouluttamiseen, jotta se oppii tunnistamaan datan sisäisiä kuvioita;
sequences = np.random.rand(self.num_samples, self.seq_length, input_size).astype(np.float32)
labels = np.zeros(self.num_samples, dtype=np.int64)
  • RNN-mallin rakentaminen: luomme yksinkertaisen RNN-arkkitehtuurin, jossa on yksi piilokerros. Syötekerros vastaanottaa datan, piilokerros käsittelee sen ja välittää tuloksen seuraavaan vaiheeseen. Viimeinen kerros tuottaa ennusteen;
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)
  • RNN:n koulutus: koulutuksen aikana RNN säätää sisäisiä painojaan takaisinkytkentäalgoritmin avulla minimoidakseen ennustevirheet. Käytämme tappiofunktiota (esim. keskineliövirhe) mallin suorituskyvyn mittaamiseen;
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()
  • Mallin arviointi: koulutuksen jälkeen testaamme RNN:n kykyä ennustaa tulevia datapisteitä opituista testidatan kuvioista. Tämä auttaa arvioimaan, kuinka hyvin malli yleistää;
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} %')
  • Koodiesimerkki: tämän luvun koodi on ladattavissa.

Yhteenvetona: yksinkertaisen RNN:n toteutus sisältää datan valmistelun, arkkitehtuurin määrittelyn, mallin koulutuksen ja suorituskyvyn arvioinnin. Käytännön lähestymistapa antaa ymmärrystä siitä, miten RNN:iä voidaan hyödyntää sekvenssien ennustustehtävissä.

question mark

Koulutussilmukassa, mikä funktio laskee tappion gradientit?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

Can you explain what the hidden state in an RNN does?

How does the sequence length affect the RNN's performance?

What are some common shortcomings of basic RNNs?

Awesome!

Completion rate improved to 4.55

bookPerustason RNN:n Toteuttaminen

Pyyhkäise näyttääksesi valikon

Toteutamme yksinkertaisen RNN:n havainnollistaaksemme, kuinka verkko käsittelee sekventiaalista dataa ja tekee ennusteita. Käytämme pientä testidataa esitelläksemme, kuinka RNN oppii datasta ja säätää painojaan.

  • Testidatan luominen: ensin generoimme pienen aineiston, joka koostuu yksinkertaisista numeerisista sekvensseistä. Näitä sekvenssejä käytetään RNN:n kouluttamiseen, jotta se oppii tunnistamaan datan sisäisiä kuvioita;
sequences = np.random.rand(self.num_samples, self.seq_length, input_size).astype(np.float32)
labels = np.zeros(self.num_samples, dtype=np.int64)
  • RNN-mallin rakentaminen: luomme yksinkertaisen RNN-arkkitehtuurin, jossa on yksi piilokerros. Syötekerros vastaanottaa datan, piilokerros käsittelee sen ja välittää tuloksen seuraavaan vaiheeseen. Viimeinen kerros tuottaa ennusteen;
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)
  • RNN:n koulutus: koulutuksen aikana RNN säätää sisäisiä painojaan takaisinkytkentäalgoritmin avulla minimoidakseen ennustevirheet. Käytämme tappiofunktiota (esim. keskineliövirhe) mallin suorituskyvyn mittaamiseen;
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()
  • Mallin arviointi: koulutuksen jälkeen testaamme RNN:n kykyä ennustaa tulevia datapisteitä opituista testidatan kuvioista. Tämä auttaa arvioimaan, kuinka hyvin malli yleistää;
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} %')
  • Koodiesimerkki: tämän luvun koodi on ladattavissa.

Yhteenvetona: yksinkertaisen RNN:n toteutus sisältää datan valmistelun, arkkitehtuurin määrittelyn, mallin koulutuksen ja suorituskyvyn arvioinnin. Käytännön lähestymistapa antaa ymmärrystä siitä, miten RNN:iä voidaan hyödyntää sekvenssien ennustustehtävissä.

question mark

Koulutussilmukassa, mikä funktio laskee tappion gradientit?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4
some-alt