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

bookPerus-RNN:n Toteuttaminen

Toteutamme yksinkertaisen RNN:n havainnollistaaksemme, miten 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 opettamaan RNN:ää 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. Lopullinen kerros antaa 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 kouluttaminen: koulutuksen aikana RNN säätää sisäisiä painojaan takaisinkytkentäalgoritmin avulla minimoidakseen ennustevirheet. Käytämme häviöfunktiota (esim. keskineliövirhe) mittaamaan mallin suorituskykyä;
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. Tämä käytännönläheinen lähestymistapa antaa ymmärrystä siitä, miten RNN:iä voidaan hyödyntää sekvenssien ennustustehtävissä.

question mark

Koulutussilmukassa, mikä funktio laskee häviön 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 and why it's important?

How does the sequence length affect the RNN's ability to learn patterns?

What are some common shortcomings of basic RNNs that were mentioned?

Awesome!

Completion rate improved to 4.55

bookPerus-RNN:n Toteuttaminen

Pyyhkäise näyttääksesi valikon

Toteutamme yksinkertaisen RNN:n havainnollistaaksemme, miten 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 opettamaan RNN:ää 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. Lopullinen kerros antaa 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 kouluttaminen: koulutuksen aikana RNN säätää sisäisiä painojaan takaisinkytkentäalgoritmin avulla minimoidakseen ennustevirheet. Käytämme häviöfunktiota (esim. keskineliövirhe) mittaamaan mallin suorituskykyä;
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. Tämä käytännönläheinen lähestymistapa antaa ymmärrystä siitä, miten RNN:iä voidaan hyödyntää sekvenssien ennustustehtävissä.

question mark

Koulutussilmukassa, mikä funktio laskee häviön gradientit?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4
some-alt