使用K.function()調試keras操作
Keras的底層庫使用Theano或TensorFlow,這兩個庫也稱為Keras的后端。無論是Theano還是TensorFlow,都需要提前定義好網絡的結構,也就是常說的“計算圖”。
在運行前需要對計算圖編譯,然后才能輸出結果。那這里面主要有兩個問題,第一是這個圖結構在運行中不能任意更改,比如說計算圖中有一個隱含層,神經元的數量是100,你想動態(tài)的修改這個隱含層神經元的數量那是不可以的;第二是調試困難,keras沒有內置的調試工具,所以計算圖的中間結果是很難看到的,一旦最終輸出跟預想不一致,很難找到問題所在。
這里談一談本人調試keras的一些經驗:
分階段構建你的神經網絡
不要一口氣把整個網絡全部寫完,這樣很難保證中間結果的正確性。加如一個CNN文本分類模型是這樣的(如下代碼),應該在加了Embedding層后,停止,打印一下中間結果,看看跟embedding向量能不能對上,輸出的shape對不對。對上了再進行下一步操作。
有的人覺得這樣很浪費時間,但是除非你能一遍寫對,否則你將花上5倍的時間發(fā)現錯誤。
# model parameters:
embedding_dims = 50
cnn_filters = 100
cnn_kernel_size = 5
dense_hidden_dims = 200
model = Sequential()
model.add(Embedding(nb_words,embedding_dims,input_length=maxlen))
model.add(Dropout(0.5))
model.add(Conv1D(cnn_filters, cnn_kernel_size,padding='valid', activation='relu'))
model.add(GlobalMaxPooling1D())
model.add(Dense(dense_hidden_dims))
model.add(Dropout(0.5))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
return model
使用K.function()函數打印中間結果
function函數可以接收傳入數據,并返回一個numpy數組。使用這個函數我們可以方便地看到中間結果,尤其對于變長輸入的Input。
下面是官方關于function的文檔。
function
keras.backend.function(inputs, outputs, updates=None)
實例化 Keras 函數。
參數
inputs: 占位符張量列表。
outputs: 輸出張量列表。
updates: 更新操作列表。
**kwargs: 需要傳遞給 tf.Session.run 的參數。
返回
輸出值為 Numpy 數組。
異常
ValueError: 如果無效的 kwargs 被傳入。
example
下面這個例子是打印一個LSTM層的中間結果,值得注意的是這個LSTM的sequence是變長的,可以看到輸出的結果sequence長度分別是64和128
import keras.backend as K from keras.layers import LSTM, Input import numpy as np I = Input(shape=(None, 200)) lstm = LSTM(20, return_sequences=True) f = K.function(inputs=[I], outputs=[lstm(I)]) data1 = np.random.random(size=(2, 64, 200)) print(f([data1])[0].shape) data2 = np.random.random(size=(2, 128, 200)) print(f([data2])[0].shape) K.clear_session() # (2, 64, 20) # (2, 128, 20)
其他的調試技巧
有頻繁張量變換操作的,如dot, mat, reshape等等,記得加一行形狀變化的注釋,如(100, 128)--> (100, 64)
可以使用tensorboard查看網絡的參數情況
確保你的數據沒有問題,很多時候輸出不對不是神經網絡有問題,而是數據有問題
以上這篇使用K.function()調試keras操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Python和XPath解析動態(tài)JSON數據的操作指南
JSON動態(tài)數據在Python中扮演著重要的角色,為開發(fā)者提供了處理實時和靈活數據的能力,動態(tài)JSON數據的獲取可能涉及到網絡請求和API調用,可以使用Python和XPath來解析動態(tài)JSON數據,接下來小編就給大家介紹一下操作步驟2023-09-09

