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, kursun bir parçasıdır

Python ile Deep Reinforcement Learning

Kursa Göz Atın

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ı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

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