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
Johdatus RNN-Verkkoihin

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

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