ПочатиПочніть безкоштовно

A2C з пакетними оновленнями

У цьому курсі ви використовували варіації однієї й тієї самої базової навчальної петлі DRL. На практиці цю структуру можна розширювати різними способами, наприклад, щоб підтримувати пакетні оновлення.

Тепер ви знову розглянете навчальну петлю A2C в середовищі Lunar Lander, але замість оновлення мереж на кожному кроці ви чекатимете 10 кроків, перш ніж виконати крок градієнтного спуску. Усереднюючи втрати за 10 кроків, ви отримаєте дещо стабільніші оновлення.

Ця вправа є частиною курсу

Глибоке навчання з підкріпленням у Python

Переглянути курс

Інструкції до вправи

  • Додайте втрати з кожного кроку до тензорів втрат для поточного пакета.
  • Обчисліть пакетні втрати.
  • Переініціалізуйте тензори втрат.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

actor_losses = torch.tensor([])
critic_losses = torch.tensor([])
for episode in range(10):
    state, info = env.reset()
    done = False
    episode_reward = 0
    step = 0
    while not done:
        step += 1
        action, action_log_prob = select_action(actor, state)                
        next_state, reward, terminated, truncated, _ = env.step(action)
        done = terminated or truncated
        episode_reward += reward
        actor_loss, critic_loss = calculate_losses(
            critic, action_log_prob, 
            reward, state, next_state, done)
        # Append to the loss tensors
        actor_losses = torch.cat((____, ____))
        critic_losses = torch.cat((____, ____))
        if len(actor_losses) >= 10:
            # Calculate the batch losses
            actor_loss_batch = actor_losses.____
            critic_loss_batch = critic_losses.____
            actor_optimizer.zero_grad(); actor_loss_batch.backward(); actor_optimizer.step()
            critic_optimizer.zero_grad(); critic_loss_batch.backward(); critic_optimizer.step()
            # Reinitialize the loss tensors
            actor_losses = ____
            critic_losses = ____
        state = next_state
    describe_episode(episode, reward, episode_reward, step)
Редагувати та запускати код