2017-04-17 69 views
2

我正在實現自己的keras丟失函數。我如何訪問張量值?調試keras張量值

我已經試過

def loss_fn(y_true, y_pred): 
    print y_true 

它打印

Tensor("target:0", shape=(?, ?), dtype=float32) 

是否有任何keras函數訪問y_true值?

回答

4

通常,y_true你提前知道 - 準備您的火車語料中......

然而,有一個訣竅,看看裏面y_true和/或y_pred值。 Keras給你一個機會來編寫各自的callback來打印神經網絡的輸出。 它會是這個樣子:

def loss_fn(y_true, y_pred): 
    return y_true # or y_pred 
... 
import keras.callbacks as cbks 
class CustomMetrics(cbks.Callback): 

    def on_epoch_end(self, epoch, logs=None): 
     for k in logs: 
      if k.endswith('loss_fn'): 
       print logs[k] 

這裏loss_fn是你的損失函數的名稱,當你模型的編譯過程中傳遞到model.compile(...,metrics=[loss_fn],)功能。

所以,最後,你必須通過這個CustomMetrics回調作爲參數到model.fit()

model.fit(x=train_X, y=train_Y, ... , callbacks=[CustomMetrics()]) 

PS:如果您在Keras使用Theano(或TensorFlow)喜歡這裏,你寫一個Python程序,然後編譯它並執行。所以,在你的例子中y_true - 只是一個張量變量,用於進一步編譯和丟失函數計數。

這意味着無法查看其中的值。例如,在Theano中,您可以在執行相應的eval()函數後查看唯一所謂的共享變量。有關更多信息,請參閱this question

0

您無法直接從張量符號變量中獲取值。喲需要編寫一個theano函數來提取值。不要忘記選擇theano作爲Keras的後端。

檢查筆記本鏈接以獲取一些基本的theano變量和函數:get tensor value in call function of own layers

相關問題