बैच अपडेट्स के साथ A2C
इस कोर्स में अब तक आपने एक ही कोर DRL ट्रेनिंग लूप के विभिन्न रूपों का उपयोग किया है. व्यवहार में, इस संरचना को बढ़ाने के कई तरीके होते हैं, जैसे कि बैच अपडेट्स को शामिल करना.
अब आप Lunar Lander एनवायरनमेंट पर A2C ट्रेनिंग लूप पर लौटेंगे, लेकिन हर स्टेप पर नेटवर्क्स को अपडेट करने के बजाय, आप ग्रेडिएंट डिसेंट स्टेप चलाने से पहले 10 स्टेप बीतने का इंतज़ार करेंगे. 10 स्टेप्स पर लॉस का औसत लेने से, अपडेट्स थोड़े अधिक स्थिर हो जाते हैं.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में Deep Reinforcement Learning
अभ्यास निर्देश
- हर स्टेप से निकले लॉस को करंट बैच के लॉस टेन्सर्स में जोड़ें.
- बैच लॉसेज़ की गणना करें.
- लॉस टेन्सर्स को फिर से रीइनिशियलाइज़ करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
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)