Sabit Q-hedefleri
Sabit Q-hedefleriyle Lunar Lander'ını eğitmeye hazırlanıyorsun. Önkoşul olarak, hem eylemi seçen çevrimiçi ağı hem de TD-hedefi hesaplamasında kullanılan hedef ağı oluşturman gerekiyor.
Ayrıca, her eğitim adımında kullanabileceğin bir update_target_network işlevi de yazmalısın. Hedef ağ gradyan inişiyle güncellenmez; bunun yerine, update_target_network ağırlıklarını küçük bir miktar Q-ağına doğru iterek zaman içinde oldukça kararlı kalmasını sağlar.
Dikkat: Yalnızca bu egzersizde, durum sözlüğünü kolayca yazdırıp inceleyebilmemiz için çok küçük bir ağ kullanıyorsun. Sadece iki boyutlu tek bir gizli katmana sahip; eylem uzayı ve durum uzayı da boyut 2'dir.
print_state_dict() işlevi, durum sözlüğünü yazdırman için ortamında hazırdır.
Bu egzersiz
Python ile Deep Reinforcement Learning
kursunun bir parçasıdırEgzersiz talimatları
- Hem hedef hem de çevrimiçi ağlar için
.state_dict()değerini al. tauçevrimiçi ağın ağırlığı olacak şekilde, çevrimiçi ağın ve hedef ağın parametreleri arasında ağırlıklı ortalama alarak hedef ağın durum sözlüğünü güncelle.- Güncellenmiş durum sözlüğünü hedef ağa geri yükle.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
def update_target_network(target_network, online_network, tau):
# Obtain the state dicts for both networks
target_net_state_dict = ____
online_net_state_dict = ____
for key in online_net_state_dict:
# Calculate the updated state dict for the target network
target_net_state_dict[key] = (online_net_state_dict[____] * ____ + target_net_state_dict[____] * ____)
# Load the updated state dict into the target network
target_network.____
return None
print("online network weights:", print_state_dict(online_network))
print("target network weights (pre-update):", print_state_dict(target_network))
update_target_network(target_network, online_network, .001)
print("target network weights (post-update):", print_state_dict(target_network))