2016-08-11 148 views
0

對於大學項目,我想訓練一個(模擬的)機器人在給定位置和速度的情況下擊球。首先要嘗試的是策略梯度:我有一個參數軌跡生成器。對於每個訓練位置,我通過我的網絡提供位置,發送彈道到模擬器並獲得回報。我現在可以使用它作爲損失,對梯度進行採樣,將其反饋回來並更新網絡的權重,以便下次更好。Keras中的非符號損失/ TensorFlow

因此,目標是學習從位置到軌跡權重的映射。當使用像Theano和Tensorflow(或Keras)這樣的全明星計算圖形庫時,我有一個問題,我不知道如何實際建模該系統。我想首先有標準的完全連接層,然後輸出是我的軌跡權重。但我如何真正計算損失,以便它可以使用backprop?

在自定義丟失函數中,我會忽略/不指定真正的標籤,運行模擬器並返回它給出的損失。但從我讀到的,你需要返回一個符號的Theano/Tensorflow函數。我的損失相當複雜,所以我不想將它從模擬器移動到網絡。我怎樣才能實現呢?然後問題是區分這種損失,因爲我可能需要抽樣才能得到該梯度。

+1

在TensorFlow中,您可以輸入任何張量。這意味着您可以創建一個虛擬損失的網絡,然後使用'feed_dict'將虛擬損失替換爲外部計算的損失/方向 –

回答

0

前段時間我有類似的問題。

有一個很大程度上依賴優化C代碼和第三方庫的損失函數。 將此移植到tensorflow是不可能的。

但是我們仍然想要訓練張量流圖以從當前設置創建轉向信號。

下面是一個 IPython的筆記本這解釋瞭如何混合數字分析衍生物 https://nbviewer.jupyter.org/gist/lhk/5943fa09922693a0fbbbf8dc9d1b05c0

這裏是想法的更詳細的描述它背後:

曲線圖的訓練是一個優化問題,所以你一定需要損失的衍生物。 挑戰在於混合張量流中的分析導數和損失的數值導數。

需要此設置

  • 輸入I
  • 輸出P
  • 圖G映射I到P,P = G(I)
  • 添加相同的形狀P的常數, P = C * G(I)
  • 損失函數L

訓練tensorflow圖表可與backp ropagation。 對於圖中的每一個參數X,以下衍生物被計算

分升/ DX =分升/ DP *的dP/DX

的該第二部分,DP/DX通過剛建立來用於自由張量流圖。但我們仍然需要損失的衍生物。

現在有個竅門。

我們希望張量流根據正確的梯度dL/dP * dP/dX更新X,但是我們無法得到張量流來計算dL/dP,因爲這不是張量流圖。

我們將改爲使用P〜= P * C,

的爲該衍生物的dP〜/ DX =上升/ DX * C

所以如果我們設定C到升/ DP,我們得到正確的漸變。

我們只需要用數值梯度估計C.

這是算法:

  • 設置你的圖表,乘的輸出與常數C
  • 進料1爲常數,計算直傳,得到預測P
  • 計算損耗爲P
  • 計算P的數值衍生物
  • 喂數值衍生物如C,計算向後通,更新參數