歡迎您光臨本站 註冊首頁

keras 獲取某層輸出 獲取複用層的多次輸出實例

←手機掃碼閱讀     ml5rwbikls @ 2020-06-11 , reply:0

官方文檔很全面,搜索功能也很好。但是如果你想單獨實現某個功能,根本無從搜尋。於是我寫了這個筆記。從功能出發。

兩個tensor經過一個layer實例會產生兩個輸出。

  a = Input(shape=(280, 256))  b = Input(shape=(280, 256))     lstm = LSTM(32)  encoded_a = lstm(a)  encoded_b = lstm(b)     lstm.output

 

這個代碼有錯誤,因為最後一行沒有指定lstm這個layer實例的那個輸出。

  >> AttributeError: Layer lstm_1 has multiple inbound nodes,  hence the notion of "layer output" is ill-defined.  Use `get_output_at(node_index)` instead.

 

所以如果想要得到多個輸出中的一個:

assert lstm.get_output_at(0) == encoded_a
 assert lstm.get_output_at(1) == encoded_b

補充知識:kears訓練中如何實時輸出卷積層的結果?

在訓練unet模型時,發現預測結果和真實結果幾乎完全差距太大,想著打印每層輸出的結果查看問題在哪?

但是發現kears只是提供了訓練完成後在模型測試時輸出每層的函數。並沒有提供訓練時的函數,同時本著不對原有代碼進行太大改動。最後實現了這個方法。

即新建一個輸出節點添加到現有的網絡結構裡面。

  #新建一個打印層。  class PrintLayer(Layer):  	#初始化方法,不須改變   def __init__(self, **kwargs):    super(PrintLayer, self).__init__(**kwargs)  	#調用該層時執行的方法   def call(self, x):    x = tf.Print(x,[x],message="x is: ",summarize=65536)    #調用tf的Print方法打印tensor方法,第一個參數為輸入的x,第二個參數為要輸出的參數,summarize參數為輸出的元素個數。    return x;    #一定要返回tf.Print()函數返回的變量,不要直接使用傳入的變量。     #接著在網絡中引入  conv9 = Conv2D(2, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)  print11 = PrintLayer()(conv9)  conv10 = Conv2D(1, 1, activation = 'sigmoid')(print11)  #PrintLayer層處理的結果一定要在下一層用到,不然不會打印tensor。該結點可以加在任何結點之間。

   


[ml5rwbikls ] keras 獲取某層輸出 獲取複用層的多次輸出實例已經有280次圍觀

http://coctec.com/docs/python/shhow-post-238023.html