ComeçarComece gratuitamente

A2C com atualizações em lote

Neste curso, até agora, você tem usado variações em torno do mesmo loop de treinamento do núcleo DRL. Na prática, há várias maneiras de estender essa estrutura, por exemplo, para acomodar atualizações em lote.

Agora, você revisitará o loop de treinamento A2C no ambiente do Lunar Lander, mas, em vez de atualizar as redes a cada etapa, você esperará até que 10 etapas tenham se passado antes de executar a etapa de descida do gradiente. Ao calcular a média das perdas em 10 etapas, você se beneficiará de atualizações um pouco mais estáveis.

Este exercício faz parte do curso

Aprendizado por reforço profundo em Python

Ver Curso

Instruções de exercício

  • Acrescente as perdas de cada etapa aos tensores de perda do lote atual.
  • Calcule as perdas do lote.
  • Reinicialize os tensores de perda.

Exercício interativo prático

Experimente este exercício preenchendo este código de exemplo.

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)
Editar e executar código