Kom igångKom igång gratis

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

Visa kurs

Ö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 tau anvä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))
Redigera och kör kod