1. <span id="4x4v6"></span>

    1. <button id="4x4v6"><acronym id="4x4v6"></acronym></button>

      <tbody id="4x4v6"></tbody>

      <dd id="4x4v6"><pre id="4x4v6"></pre></dd>

      當前位置 博文首頁 > tianjuewudi的博客:強化學習之DQN代碼(pytorch實現)

        tianjuewudi的博客:強化學習之DQN代碼(pytorch實現)

        作者:[db:作者] 時間:2021-09-26 09:52

        本代碼取自周博磊強化學習課程https://space.bilibili.com/511221970/channel/detail?cid=105354&ctype=0

        源碼:https://download.csdn.net/download/tianjuewudi/24541126

        此處程序個人感覺過多過亂,應整理出屬于自己風格的代碼結構,這是編程實現必不可少的環節。

        導入包

        import gym
        from gym import wrappers
        
        import torch
        import torch.nn as nn
        import torch.optim as optim
        import torch.nn.functional as F
        
        import numpy as np
        
        from IPython.display import clear_output
        from matplotlib import pyplot as plt
        %matplotlib inline
        
        import random
        from timeit import default_timer as timer
        from datetime import timedelta
        import math
        from utils.wrappers import make_atari, wrap_deepmind, wrap_pytorch
        
        from utils.hyperparameters import Config
        from agents.BaseAgent import BaseAgent
        # 這兩行不加會導致Notebook出現內核停止的問題
        import os
        os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
        

        超參數

        utils.hypeparameter文件:

        import torch
        import math
        
        
        class Config(object):
            def __init__(self):
                self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        
                #PPO controls
                self.ppo_epoch = 3
                self.num_mini_batch = 32
                self.ppo_clip_param = 0.1
        
                #a2c controls
                self.num_agents = 8
                self.rollout = 16
                self.value_loss_weight = 0.5
                self.entropy_loss_weight = 0.001
                self.grad_norm_max = 0.5
                self.USE_GAE=True
                self.gae_tau = 0.95
        
                #algorithm control
                self.USE_NOISY_NETS=False
                self.USE_PRIORITY_REPLAY=False
                
                #Multi-step returns
                self.N_STEPS = 1
        
                #epsilon variables
                self.epsilon_start = 1.0
                self.epsilon_final = 0.01
                self.epsilon_decay = 30000
                self.epsilon_by_frame = lambda frame_idx: self.epsilon_final + (self.epsilon_start - self.epsilon_final) * math.exp(-1. * frame_idx / self.epsilon_decay)
        
                #misc agent variables
                self.GAMMA=0.99
                self.LR=1e-4
        
                #memory
                self.TARGET_NET_UPDATE_FREQ = 1000
                self.EXP_REPLAY_SIZE = 100000
                self.BATCH_SIZE = 32
                self.PRIORITY_ALPHA=0.6
                self.PRIORITY_BETA_START=0.4
                self.PRIORITY_BETA_FRAMES = 100000
        
                #Noisy Nets
                self.SIGMA_INIT=0.5
        
                #Learning control variables
                self.LEARN_START = 10000
                self.MAX_FRAMES=100000
        
                #Categorical Params
                self.ATOMS = 51
                self.V_MAX = 10
                self.V_MIN = -10
        
                #Quantile Regression Parameters
                self.QUANTILES=51
        
                #DRQN Parameters
                self.SEQUENCE_LENGTH=8
        
        
        

        主文件代碼:

        # 導入預先設定的參數
        config = Config()
        
        config.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        
        # epsilon為探索因子,越小隨機探索的概率越低,我們期望在訓練初期能給予模型更多的探索機會,找到相對更優的路徑,后期穩定更新。
        config.epsilon_start = 1.0
        config.epsilon_final = 0.01
        config.epsilon_decay = 30000
        config.epsilon_by_frame = lambda frame_idx: config.epsilon_final + (config.epsilon_start - config.epsilon_final) * math.exp(-1. * frame_idx / config.epsilon_decay)
        
        # 折扣因子以及學習率
        config.GAMMA=0.99
        config.LR=1e-4
        
        #memory
        config.TARGET_NET_UPDATE_FREQ = 1000
        config.EXP_REPLAY_SIZE = 100000
        config.BATCH_SIZE = 32
        
        #Learning control variables
        config.LEARN_START = 10000
        # 最多跑多少episode
        config.MAX_FRAMES=1000000
        

        經驗回放池

        class ExperienceReplayMemory:
            def __init__(self, capacity):
                self.capacity = capacity
                self.memory = []
            
            # 當數據過多時,刪除最早的數據
            def push(self, transition):
                self.memory.append(transition)
                if len(self.memory) > self.capacity:
                    del self.memory[0]
        	# 在經驗池中抽取batch_size個樣本
            def sample(self, batch_size):
                return random.sample(self.memory, batch_size)
        
            def __len__(self):
                return len(self.memory)
        

        神經網絡

        class DQN(nn.Module):
            def __init__(self, input_shape, num_actions):
                super(DQN, self).__init__()
                
                self.input_shape = input_shape
                self.num_actions = num_actions
        
                # 注意輸入的是一個畫面,如果有RGB三層,input_shape[0]=3
                self.conv1 = nn.Conv2d(self.input_shape[0], 32, kernel_size=8, stride=4)
                self.conv2 = nn.Conv2d(32, 64, kernel_size=4, stride=2)
                self.conv3 = nn.Conv2d(64, 64, kernel_size=3, stride=1)
        
                self.fc1 = nn.Linear(self.feature_size(), 512)
                self.fc2 = nn.Linear(512, self.num_actions)
                
            def forward(self, x):
                # 三個卷積層+展開+帶ReLU全連接層+不帶ReLU全連接層
                x = F.relu(self.conv1(x))
                x = F.relu(self.conv2(x))
                x = F.relu(self.conv3(x))
                x = x.view(x.size(0), -1)
                x = F.relu(self.fc1(x))
                x = self.fc2(x)
        
                return x
            
            def feature_size(self):
                return self.conv3(self.conv2(self.conv1(torch.zeros(1, *self.input_shape)))).view(1, -1).size(1)
        

        智能體

        BaseAgent文件:

        import numpy as np
        import pickle
        import os.path
        
        import torch
        import torch.optim as optim
        
        
        class BaseAgent(object):
            def __init__(self):
                self.model=None
                self.target_model=None
                self.optimizer = None
                self.losses = []
                self.rewards = []
                self.sigma_parameter_mag=[]
        
            def huber(self, x):
                cond = (x.abs() < 1.0).float().detach()
                return 0.5 * x.pow(2) * cond + (x.abs() - 0.5) * (1.0 - cond)
        
            # 保存模型和優化器
            def save_w(self):
                torch.save(self.model.state_dict(), './saved_agents/model.dump')
                torch.save(self.optimizer.state_dict(), './saved_agents/optim.dump')
            # 導入模型和優化器
            def load_w(self):
                fname_model = "./saved_agents/model.dump"
                fname_optim = "./saved_agents/optim.dump"
        
                if os.path.isfile(fname_model):
                    self.model.load_state_dict(torch.load(fname_model
        
      英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 大番薯:編程術語英漢對照 PHP中16個高危函數 PHP讀取word文檔的方法分析 匯編語言和c語言的區別有哪些 怎么判斷流量波動?網站流量日記法介紹 這些網站優化常見問題站長必知 C# 顯示、隱藏窗口對應的任務欄 PyCharm插件開發實踐之PyGetterAndSetter詳解 基于IntelliJ IDEA/Android Studio插件開發指南(推薦) 解決啟用 Spring-Cloud-OpenFeign 配置可刷新項目無法啟動的問題 深入淺析Go中三個點(...)用法 VeriSign要求注冊商對Com域名資料進行審查 聊聊golang怎么調用php7 新鮮出爐的Go面試題(百度和米哈游) php8的注解你了解多少? 網站SEO優化選擇關鍵詞的5大注意事項 seo引流技巧:思維與實操層面上的內容+渠道方是推廣優化的主導 使用spring框架實現數據庫事務處理方式 SpringBoot默認使用HikariDataSource數據源方式 spring boot中配置hikari連接池屬性方式 Feign 使用HttpClient和OkHttp方式
      成本人片无码中文字幕免费

      1. <span id="4x4v6"></span>

        1. <button id="4x4v6"><acronym id="4x4v6"></acronym></button>

          <tbody id="4x4v6"></tbody>

          <dd id="4x4v6"><pre id="4x4v6"></pre></dd>