使用本文中的 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()
兩次。
添加回答
舉報
0/150
提交
取消