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ırEgzersiz 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)