Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Реалізація Базової RNN | Вступ до RNN
Вступ до RNN

bookРеалізація Базової RNN

Ми реалізуємо базову RNN, щоб продемонструвати, як мережа обробляє послідовні дані та робить передбачення. Для демонстрації того, як RNN навчається на даних і коригує свої ваги, використовується невеликий тестовий набір даних.

  • Створення тестових даних: спочатку генеруємо невеликий набір даних, що складається з простих числових послідовностей. Ці послідовності будуть використані для навчання нашої RNN виявляти закономірності у даних;
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: створюємо просту архітектуру RNN з одним прихованим шаром. Вхідний шар отримує дані, прихований шар їх обробляє та передає результат на наступний крок. Останній шар формує передбачення;
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: під час навчання RNN коригує свої внутрішні ваги за допомогою зворотного поширення помилки для мінімізації помилок передбачення. Для оцінки якості моделі використовується функція втрат (наприклад, середньоквадратична помилка);
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()
  • Оцінювання моделі: після навчання перевіряємо здатність RNN передбачати майбутні значення на основі вивчених закономірностей із тестових даних. Це дозволяє оцінити, наскільки добре модель узагальнює;
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} %')
  • Приклад коду: код, використаний у цьому розділі, можна завантажити.

Підсумовуючи, реалізація базової RNN включає підготовку даних, визначення архітектури, навчання моделі та оцінювання її ефективності. Такий практичний підхід дозволяє зрозуміти, як RNN застосовуються для задач передбачення послідовностей.

question mark

У навчальному циклі, яка функція обчислює градієнти функції втрат?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 4.55

bookРеалізація Базової RNN

Свайпніть щоб показати меню

Ми реалізуємо базову RNN, щоб продемонструвати, як мережа обробляє послідовні дані та робить передбачення. Для демонстрації того, як RNN навчається на даних і коригує свої ваги, використовується невеликий тестовий набір даних.

  • Створення тестових даних: спочатку генеруємо невеликий набір даних, що складається з простих числових послідовностей. Ці послідовності будуть використані для навчання нашої RNN виявляти закономірності у даних;
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: створюємо просту архітектуру RNN з одним прихованим шаром. Вхідний шар отримує дані, прихований шар їх обробляє та передає результат на наступний крок. Останній шар формує передбачення;
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: під час навчання RNN коригує свої внутрішні ваги за допомогою зворотного поширення помилки для мінімізації помилок передбачення. Для оцінки якості моделі використовується функція втрат (наприклад, середньоквадратична помилка);
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()
  • Оцінювання моделі: після навчання перевіряємо здатність RNN передбачати майбутні значення на основі вивчених закономірностей із тестових даних. Це дозволяє оцінити, наскільки добре модель узагальнює;
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} %')
  • Приклад коду: код, використаний у цьому розділі, можна завантажити.

Підсумовуючи, реалізація базової RNN включає підготовку даних, визначення архітектури, навчання моделі та оцінювання її ефективності. Такий практичний підхід дозволяє зрозуміти, як RNN застосовуються для задач передбачення послідовностей.

question mark

У навчальному циклі, яка функція обчислює градієнти функції втрат?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 4
some-alt