Реалізація Базової 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 застосовуються для задач передбачення послідовностей.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 4.55
Реалізація Базової 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 застосовуються для задач передбачення послідовностей.
Дякуємо за ваш відгук!