BaşlayınÜcretsiz Başlayın

Toplu güncellemelerle A2C

Bu derste şimdiye kadar aynı temel DRL eğitim döngüsünün farklı varyasyonlarını kullandın. Pratikte, bu yapıyı genişletmenin, örneğin toplu (batch) güncellemeleri desteklemek için, çeşitli yolları vardır.

Şimdi Lunar Lander ortamında A2C eğitim döngüsüne geri döneceksin; ancak ağları her adımda güncellemek yerine, gradyan inişi adımını çalıştırmadan önce 10 adımın geçmesini bekleyeceksin. Kayıpları 10 adım boyunca ortalayarak, biraz daha kararlı güncellemeler elde edeceksin.

Bu egzersiz

Python ile Deep Reinforcement Learning

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • Her adımdan gelen kayıpları, geçerli yığın için kayıp tensörlerine ekle.
  • Yığın kayıplarını hesapla.
  • Kayıp tensörlerini yeniden başlat.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

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)
Kodu Düzenle ve Çalıştır