国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【李宏毅】HW12

這篇具有很好參考價值的文章主要介紹了【李宏毅】HW12。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


一、作業(yè)描述

在這個HW中,你可以自己實現(xiàn)一些深度強化學(xué)習(xí)方法:
1、策略梯度Policy Gradient
2、Actor-Critic
這個HW的環(huán)境是OpenAI gym的月球著陸器。希望這個月球著陸器落在兩個旗子中間。
什么是月球著陸器?
“LunarLander-v2”是模擬飛行器在月球表面著陸時的情況。
這項任務(wù)是使飛機能夠“安全地”降落在兩個黃色旗幟之間的停機坪上。著陸平臺始終位于坐標(biāo)(0,0)處。坐標(biāo)是狀態(tài)向量中的前兩個數(shù)字。“LunarLander-v2”實際上包括“代理”和“環(huán)境”。在本作業(yè)中,我們將利用函數(shù)“step()”來控制“代理”的動作。
那么‘step()’將返回由“環(huán)境”給出的觀察/狀態(tài)和獎勵…
【李宏毅】HW12
Box(8,)意味著觀察是一個8維向量

【李宏毅】HW12

‘Discrete(4)’意味著代理可以采取四種行動。

  • 0表示代理不會采取任何操作
  • 2意味著代理將向下加速
  • 1,3意味著代理將向左和向右加速

接下來,我們將嘗試讓代理與環(huán)境進(jìn)行交互。
在采取任何行動之前,我們建議調(diào)用’ reset()'函數(shù)來重置環(huán)境。此外,該函數(shù)將返回環(huán)境的初始狀態(tài)。
【李宏毅】HW12

1、Policy Gradient

直接根據(jù)狀態(tài)輸出動作或者動作的概率。那么怎么輸出呢,最簡單的就是使用神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)應(yīng)該如何訓(xùn)練來實現(xiàn)最終的收斂呢?反向傳播算法,我們需要一個誤差函數(shù),通過梯度下降來使我們的損失最小。但對于強化學(xué)習(xí)來說,我們不知道動作的正確與否,只能通過獎勵值來判斷這個動作的相對好壞。如果一個動作得到的reward多,那么我們就使其出現(xiàn)的概率增加,如果一個動作得到的reward少,我們就使其出現(xiàn)的概率減小。
【李宏毅】HW12
【李宏毅】HW12
【李宏毅】HW12
【李宏毅】HW12

每次循環(huán)都要收集很多數(shù)據(jù)才進(jìn)行一次參數(shù)更新。

2、Actor-Critic

【李宏毅】HW12
【李宏毅】HW12
增加基準(zhǔn)判斷這個動作是否是真的好!
【李宏毅】HW12
分配不同的權(quán)重

【李宏毅】HW12
組合衰減因子。

二、實驗

1、simple

#torch.set_deterministic(True)
torch.use_deterministic_algorithms(True)

training result:【李宏毅】HW12
testing:【李宏毅】HW12
test reward:【李宏毅】HW12
server:
【李宏毅】HW12
score:【李宏毅】HW12

2、medium

……
NUM_BATCH = 500        # totally update the agent for 400 time
rate = 0.99
……
        while True:

            action, log_prob = agent.sample(state) # at, log(at|st)
            next_state, reward, done, _ = env.step(action)

            log_probs.append(log_prob) # [log(a1|s1), log(a2|s2), ...., log(at|st)]
            seq_rewards.append(reward)
            state = next_state
            total_reward += reward
            total_step += 1
            
            if done:
                final_rewards.append(reward)
                total_rewards.append(total_reward)
                # calculate accumulative rewards
                for i in range(2, len(seq_rewards)+1):
                    seq_rewards[-i] += rate * (seq_rewards[-i+1])
                rewards += seq_rewards
                
                break

training result:
【李宏毅】HW12
【李宏毅】HW12

testing:
【李宏毅】HW12

test reward:
【李宏毅】HW12
【李宏毅】HW12

server:
【李宏毅】HW12

score:

【李宏毅】HW12

3、strong

from torch.optim.lr_scheduler import StepLR
class ActorCritic(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Sequential(
            nn.Linear(8, 16),
            nn.Tanh(),
            nn.Linear(16, 16),
            nn.Tanh()
        )
        
        self.actor = nn.Linear(16, 4)
        self.critic = nn.Linear(16, 1)
        
        self.values = []
        self.optimizer = optim.SGD(self.parameters(), lr=0.001)
        
    def forward(self, state):
        hid = self.fc(state)
        self.values.append(self.critic(hid).squeeze(-1))
        return F.softmax(self.actor(hid), dim=-1)
    
    def learn(self, log_probs, rewards):
        values = torch.stack(self.values)
        loss = (-log_probs * (rewards - values.detach())).sum() 
        self.optimizer.zero_grad()
        loss.backward()
        
        self.optimizer.step()
        
        self.values = []
        
    def sample(self, state):
        action_prob = self(torch.FloatTensor(state))
        action_dist = Categorical(action_prob)
        action = action_dist.sample()
        log_prob = action_dist.log_prob(action)
        return action.item(), log_prob
        

training result:

【李宏毅】HW12

【李宏毅】HW12

testing:

【李宏毅】HW12

test reward:
【李宏毅】HW12

【李宏毅】HW12

server:
【李宏毅】HW12

score:
【李宏毅】HW12

三、代碼

** 準(zhǔn)備工作**
首先,我們需要安裝所有必要的軟件包。
其中一個是由OpenAI構(gòu)建的gym,它是一個開發(fā)強化學(xué)習(xí)算法的工具包。
【李宏毅】HW12
可以利用“step()”使代理按照隨機選擇的“random_action”動作。
“step()”函數(shù)將返回四個值:
-觀察/狀態(tài)
-獎勵
-完成 done(對/錯)
-其他信息

observation, reward, done, info = env.step(random_action)
print(done)

【李宏毅】HW12
獎勵
著陸平臺始終位于坐標(biāo)(0,0)處。坐標(biāo)是狀態(tài)向量中的前兩個數(shù)字。獎勵從屏幕頂部移動到著陸墊和零速度大約是100…140分。如果著陸器離開著陸平臺,它將失去回報。如果著陸器崩潰或停止,本集結(jié)束,獲得額外的-100或+100點。每個支腿接地觸點為+10。點燃主引擎每幀扣-0.3分。解決了就是200分。
隨機代理
開始訓(xùn)練之前,我們可以看看一個隨機的智能體能否成功登陸月球。

env.reset()

img = plt.imshow(env.render(mode='rgb_array'))

done = False
while not done:
    action = env.action_space.sample()
    observation, reward, done, _ = env.step(action)

    img.set_data(env.render(mode='rgb_array'))
    display.display(plt.gcf())#展示當(dāng)前圖窗的句柄
    display.clear_output(wait=True)

【李宏毅】HW12
政策梯度
現(xiàn)在,我們可以建立一個簡單的政策網(wǎng)絡(luò)。網(wǎng)絡(luò)將返回動作空間中的一個動作。

class PolicyGradientNetwork(nn.Module):

    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(8, 16)
        self.fc2 = nn.Linear(16, 16)
        self.fc3 = nn.Linear(16, 4)

    def forward(self, state):
        hid = torch.tanh(self.fc1(state))
        hid = torch.tanh(self.fc2(hid))
        return F.softmax(self.fc3(hid), dim=-1)

然后,我們需要構(gòu)建一個簡單的代理。代理將根據(jù)上述策略網(wǎng)絡(luò)的輸出進(jìn)行操作。代理可以做幾件事:

  • learn():根據(jù)對數(shù)概率和獎勵更新策略網(wǎng)絡(luò)。
  • sample():在從環(huán)境接收到觀察之后,利用策略網(wǎng)絡(luò)來告知要采取哪個動作。該函數(shù)的返回值包括動作概率和對數(shù)概率。
from torch.optim.lr_scheduler import StepLR
class PolicyGradientAgent():
    
    def __init__(self, network):
        self.network = network
        self.optimizer = optim.SGD(self.network.parameters(), lr=0.001)
        
    def forward(self, state):
        return self.network(state)
    def learn(self, log_probs, rewards):
        loss = (-log_probs * rewards).sum() # You don't need to revise this to pass simple baseline (but you can)

        self.optimizer.zero_grad()
        loss.backward()
        self.optimizer.step()
        
    def sample(self, state):
        action_prob = self.network(torch.FloatTensor(state))
        action_dist = Categorical(action_prob)
        action = action_dist.sample()
        log_prob = action_dist.log_prob(action)
        return action.item(), log_prob

訓(xùn)練代理
現(xiàn)在讓我們開始訓(xùn)練我們的代理人。
通過將代理和環(huán)境之間的所有交互作為訓(xùn)練數(shù)據(jù),策略網(wǎng)絡(luò)可以從所有這些嘗試中學(xué)習(xí)。

agent.network.train()  # Switch network into training mode 
EPISODE_PER_BATCH = 5  # update the  agent every 5 episode
NUM_BATCH = 500        # totally update the agent for 400 time

avg_total_rewards, avg_final_rewards = [], []

prg_bar = tqdm(range(NUM_BATCH))#進(jìn)度條
for batch in prg_bar:

    log_probs, rewards = [], []
    total_rewards, final_rewards = [], []

    # collect trajectory
    for episode in range(EPISODE_PER_BATCH):
        
        state = env.reset()
        total_reward, total_step = 0, 0
        seq_rewards = []
        while True:

            action, log_prob = agent.sample(state) # at, log(at|st)
            next_state, reward, done, _ = env.step(action)

            log_probs.append(log_prob) # [log(a1|s1), log(a2|s2), ...., log(at|st)]
            # seq_rewards.append(reward)
            state = next_state
            total_reward += reward
            total_step += 1
            rewards.append(reward) # change here
            # ! IMPORTANT !
            # Current reward implementation: immediate reward,  given action_list : a1, a2, a3 ......
            #                                                         rewards :     r1, r2 ,r3 ......
            # medium:change "rewards" to accumulative decaying reward, given action_list : a1,                           a2,                           a3, ......
            #                                                           rewards :           r1+0.99*r2+0.99^2*r3+......, r2+0.99*r3+0.99^2*r4+...... ,  r3+0.99*r4+0.99^2*r5+ ......
            # boss : implement Actor-Critic
            if done:
                final_rewards.append(reward)
                total_rewards.append(total_reward)
                
                break

    print(f"rewards looks like ", np.shape(rewards))  
    print(f"log_probs looks like ", np.shape(log_probs))     
    # record training process
    avg_total_reward = sum(total_rewards) / len(total_rewards)
    avg_final_reward = sum(final_rewards) / len(final_rewards)
    avg_total_rewards.append(avg_total_reward)
    avg_final_rewards.append(avg_final_reward)
    prg_bar.set_description(f"Total: {avg_total_reward: 4.1f}, Final: {avg_final_reward: 4.1f}")

    # update agent
    # rewards = np.concatenate(rewards, axis=0)
    rewards = (rewards - np.mean(rewards)) / (np.std(rewards) + 1e-9)  # normalize the reward ,std求標(biāo)準(zhǔn)差
    agent.learn(torch.stack(log_probs), torch.from_numpy(rewards))#torch.from_numpy創(chuàng)建一個張量,torch.stack沿一個新維度對輸入張量序列進(jìn)行連接,序列中所有張量應(yīng)為相同形狀
    print("logs prob looks like ", torch.stack(log_probs).size())
    print("torch.from_numpy(rewards) looks like ", torch.from_numpy(rewards).size())

訓(xùn)練結(jié)果
在訓(xùn)練過程中,我們記錄了“avg_total_reward ”,它表示在更新策略網(wǎng)絡(luò)之前集的平均總獎勵。理論上,如果代理變得更好,avg_total_reward會增加。

plt.plot(avg_total_rewards)
plt.title("Total Rewards")
plt.show()

此外,“avg_final_reward”表示集的平均最終獎勵。具體來說,最終獎勵是一集最后收到的獎勵,表示飛行器是否成功著陸。

plt.plot(avg_final_rewards)
plt.title("Final Rewards")
plt.show()

測試
測試結(jié)果將是5次測試的平均獎勵

fix(env, seed)
agent.network.eval()  # set the network into evaluation mode
NUM_OF_TEST = 5 # Do not revise this !!!
test_total_reward = []
action_list = []
for i in range(NUM_OF_TEST):
  actions = []
  state = env.reset()

  img = plt.imshow(env.render(mode='rgb_array'))

  total_reward = 0

  done = False
  while not done:
      action, _ = agent.sample(state)
      actions.append(action)
      state, reward, done, _ = env.step(action)

      total_reward += reward

      img.set_data(env.render(mode='rgb_array'))
      display.display(plt.gcf())
      display.clear_output(wait=True)
      
  print(total_reward)
  test_total_reward.append(total_reward)

  action_list.append(actions) # save the result of testing 

動作分布

distribution = {}
for actions in action_list:
  for action in actions:
    if action not in distribution.keys():
      distribution[action] = 1
    else:
      distribution[action] += 1
print(distribution)

服務(wù)器
下面的代碼模擬了judge服務(wù)器上的環(huán)境??捎糜跍y試。文章來源地址http://www.zghlxwxcb.cn/news/detail-498326.html

action_list = np.load(PATH,allow_pickle=True) # The action list you upload
seed = 543 # Do not revise this
fix(env, seed)

agent.network.eval()  # set network to evaluation mode

test_total_reward = []
if len(action_list) != 5:
  print("Wrong format of file !!!")
  exit(0)
for actions in action_list:
  state = env.reset()
  img = plt.imshow(env.render(mode='rgb_array'))

  total_reward = 0

  done = False

  for action in actions:
  
      state, reward, done, _ = env.step(action)
      total_reward += reward
      if done:
        break

  print(f"Your reward is : %.2f"%total_reward)
  test_total_reward.append(total_reward)

到了這里,關(guān)于【李宏毅】HW12的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 李宏毅機器學(xué)習(xí) hw2 boss baseline 解析

    李宏毅機器學(xué)習(xí) hw2 boss baseline 解析

    Multiclass Classification ,讓你判斷給定的向量是屬于哪一個 phoneme ,由于一個 phoneme 可能包含好多個向量,所以要對數(shù)據(jù)進(jìn)行處理,對向量進(jìn)行拼接。 不同baseline 要求 先給出我最終使用的過boss baseline的方法,后面再介紹我一步步的思考過程。 助教提示過boss baseline要使用RNN模型

    2023年04月09日
    瀏覽(75)
  • 李宏毅機器學(xué)習(xí) hw7 boss baseline分享

    李宏毅機器學(xué)習(xí) hw7 boss baseline分享

    使用bert來做問答任務(wù) 答案是都是可以在 Document 找到的,輸入 Document 和 Query 輸出兩個數(shù)字分別表示答案在Document中的開始和結(jié)束位置。 輸入格式如下: doc stride ,初始時 Doc stride 等于 max_paragraph_len ,這樣會導(dǎo)致在測試時如果答案在邊界附近就會被切割到兩個不同的 window 中

    2024年02月06日
    瀏覽(17)
  • 2023李宏毅機器學(xué)習(xí)HW05樣例代碼中文注釋版

    2023李宏毅機器學(xué)習(xí)HW05樣例代碼中文注釋版

    這里只是 2023 李宏毅機器學(xué)習(xí) HW05 樣例代碼的中文注釋版的分享,下面的內(nèi)容絕大部分是樣例代碼,補充了小部分函數(shù)的功能解釋,沒有做函數(shù)功能上的修改,是 Simple baseline 版本。 notebook 代碼下載: [EN] [ZH] 進(jìn)階閱讀:李宏毅2023機器學(xué)習(xí)作業(yè)HW05解析和代碼分享 英譯中(繁體

    2024年02月05日
    瀏覽(27)
  • 李宏毅-21-hw3:對11種食物進(jìn)行分類-CNN

    李宏毅-21-hw3:對11種食物進(jìn)行分類-CNN

    一、代碼慢慢閱讀理解+總結(jié)內(nèi)化: 1.關(guān)于torch.nn.covd2d()的參數(shù)含義、具體用法、功能: (1)參數(shù)含義: 注意,里面的“padding”參數(shù):《both》side所以是上下左右《四》邊都會加一個padding數(shù)量的0列: 證明如下: 運行結(jié)果:torch.Size([3, 4, 5, 4] (2)具體用法: 輸入:x[ batch_size,

    2024年02月09日
    瀏覽(23)
  • 李宏毅 2022機器學(xué)習(xí) HW2 strong baseline 上分路線

    李宏毅 2022機器學(xué)習(xí) HW2 strong baseline 上分路線

    baseline 增加concat_nframes (提升明顯) 增加batchnormalization 和 dropout 增加hidden layer寬度至512 (提升明顯) 提交文件命名規(guī)則為 prediction_{concat_nframes} [{n_hidden_layers} {dropout}_bn].csv (2%) Implement 2 models with approximately the same number of parameters, (A) one narrower and deeper (e.g. hidden_layers=6, hidden

    2024年02月10日
    瀏覽(21)
  • 清華青年AI自強作業(yè)hw6:基于ResNet實現(xiàn)IMAGENET分類任務(wù)

    清華青年AI自強作業(yè)hw6:基于ResNet實現(xiàn)IMAGENET分類任務(wù)

    一起學(xué)AI系列博客:目錄索引 hw6作業(yè)為基于ResNet模型,并利用VGG標(biāo)準(zhǔn)模塊和GoogleNet中的inception模塊對IMAGENET數(shù)據(jù)集進(jìn)行20類分類。模型輸入圖像尺寸為 299*299 ,輸出為softmax后的20分類。 觀察參考代碼發(fā)現(xiàn)需要使用IMAGENET處理好后的數(shù)據(jù)ILSVRC2012_20_tfrecord,由于缺乏實驗數(shù)據(jù),本

    2024年02月12日
    瀏覽(17)
  • 李宏毅-機器學(xué)習(xí)hw4-self-attention結(jié)構(gòu)-辨別600個speaker的身份

    李宏毅-機器學(xué)習(xí)hw4-self-attention結(jié)構(gòu)-辨別600個speaker的身份

    一、慢慢分析+學(xué)習(xí)pytorch中的各個模塊的參數(shù)含義、使用方法、功能: 1.encoder編碼器中的nhead參數(shù): self.encoder_layer = nn.TransformerEncoderLayer( d_model=d_model, dim_feedforward=256, nhead=2) 所以說,這個nhead的意思,就是有window窗口的大小,也就是一個b由幾個a得到 2.tensor.permute改變維度的用

    2024年02月09日
    瀏覽(28)
  • 李宏毅-hw5-translation-有關(guān)transformer、seq2seq的探索

    李宏毅-hw5-translation-有關(guān)transformer、seq2seq的探索

    一、ppt研讀: 1.關(guān)于這個 input Embedding 的內(nèi)容: 2.關(guān)于Positional Encoding: 二、慢慢積累,一點點閱讀代碼: 雖然這次的模塊挺多的,但是,這樣也就意味著,把這個內(nèi)化為自己的,就可以獲得更大的進(jìn)步了 1.關(guān)于使用git命令獲取到源代碼: 2.Fix Random Seed部分都是相同的,就是為

    2024年02月09日
    瀏覽(12)
  • vivo S12 PRO怎么解鎖vivoS12解鎖平臺刷機教程屏幕鎖激活手機鎖不記得了可以用這個方法教程刷機解鎖用的

    vivo S12 PRO怎么解鎖vivoS12解鎖平臺刷機教程屏幕鎖激活手機鎖不記得了可以用這個方法教程刷機解鎖用的

    vivo S12?5G手機vivo S12 PRO怎么解鎖修改密碼清除鎖定升級更新降版本固件系統(tǒng)資料原方包刷機教程太卡怎么降級到原來版本退回之前版本想解鎖刷機降級方法降級系統(tǒng)資料平臺驅(qū)動怎么下載使用強制刷機解鎖降回之前版本直接解鎖手機忘掉密碼屏幕鎖開機鎖賬戶鎖定直接清除刷

    2024年02月13日
    瀏覽(26)
  • 機器學(xué)習(xí)--課后作業(yè)--hw1

    機器學(xué)習(xí)--課后作業(yè)--hw1

    本篇文章全文參考這篇blog 網(wǎng)上找了很多教程,這個是相對來說清楚的,代碼可能是一模一樣,只是進(jìn)行了一些微調(diào),但是一定要理解這個模型具體的處理方法,這個模型我認(rèn)為最巧妙的它對于數(shù)據(jù)的處理,直接把前9天所有的參數(shù)參數(shù)當(dāng)作變量,最簡單粗暴的方法,,然后再

    2024年02月14日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包