這篇文章主要講解了keras如何獲取某層輸出和復用層的多次輸出,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
兩個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。該結點可以加在任何結點之間。
看完上述內容,是不是對keras如何獲取某層輸出和復用層的多次輸出有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。