亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可視化雙頭模型中的自定義損失

可視化雙頭模型中的自定義損失

暮色呼如 2022-10-25 15:23:16
使用本文中的 A2C 代理,如何獲取 的數值value_loss,policy_loss以及entropy_loss何時更新權重?我使用的模型是雙頭的,兩個頭共用一個樹干。策略頭輸出形狀為[number of actions, batch size],值頭形狀為[1, batch_size]。當這些損失函數作為指標給出時,編譯此模型會返回大小不兼容錯誤:self.model.compile(optimizer=self.optimizer,                     metrics=[self._logits_loss, self._value_loss],                     loss=[self._logits_loss, self._value_loss])兩者self._value_loss和self._policy_loss都作為圖執行,這意味著其中的所有變量都只是指向圖節點的指針。我發現了一些示例,其中評估了張量對象(使用 eval())以從節點中獲取值。我不理解它們,因為為了 eval() 一個 Tensor 對象,你需要給它一個 Session 但在 TensorFlow 2.x 中不推薦使用 Sessions。另一個線索是,當train_on_batch()從Keras 中的模型 API調用來訓練模型時,該方法會返回損失。我不明白為什么,但它返回的唯一損失來自保單負責人。該頭部的損失計算為,policy_loss - entropy_loss但我的目標是分別獲得所有三個損失以在圖表中可視化它們。歡迎任何幫助,我被卡住了。
查看完整描述

1 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

我找到了我的問題的答案。在 Keras 中,metrics內置功能為測量模型的性能和損失提供了一個接口,無論是自定義的還是標準的。

編譯模型時如下:

self.model.compile(optimizer=ko.RMSprop(lr=lr),
                   metrics=dict(output_1=self._entropy_loss),
                   loss=dict(output_1=self._logits_loss, output_2=self._value_loss))

...self.model.train_on_batch([...])返回一個列表[total_loss, logits_loss, value_loss, entropy_loss]。通過logits_loss + entropy_loss對值policy_loss進行計算可以計算出來。請注意,此解決方案會導致調用self._entropy_loss()兩次。


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號