Fasta Q-mål
Du förbereder träningen av din Lunar Lander med fasta Q-mål. Som ett första steg behöver du skapa både online-nätverket (som väljer åtgärden) och målnätverket (som används för att beräkna TD-målet).
Du behöver också implementera en funktion update_target_network som kan anropas vid varje träningssteg. Målnätverket uppdateras inte via gradientberäkning – i stället justerar update_target_network dess vikter stegvis mot Q-nätverkets vikter, vilket gör att det förblir stabilt över tid.
Observera att du i den här övningen använder ett mycket litet nätverk så att vi enkelt kan skriva ut och granska dess state dict. Det har bara ett dolt lager av storlek två, och både åtgärdsrymden och tillståndsrymden är av dimension 2.
Funktionen print_state_dict() finns tillgänglig i din miljö för att skriva ut state dict.
Den här övningen är en del av kursen
Djup förstärkningsinlärning i Python
Övningsinstruktioner
- Hämta
.state_dict()för både målnätverket och online-nätverket. - Uppdatera state dict för målnätverket genom att beräkna ett vägt medelvärde mellan parametrarna i online-nätverket och målnätverket, där
tauanvänds som vikt för online-nätverket. - Läs in den uppdaterade state dict tillbaka i målnätverket.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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))