2017-09-14 25 views
1

如何在Keras中的每個時期之後獲得Conv2D圖層的所有濾鏡(如32,64等)的權重?我提到這一點,因爲初始權重是隨機的,但優化後它們會改變。如何獲得Conv2D圖層濾鏡的權重

我檢查了this answer但不明白。請幫助我找到解決所有過濾器和每個時代後的權重的解決方案。

還有一個問題是Keras文檔中的Conv2D圖層輸入形狀是(samples,channels,rows,cols)。 samples究竟意味着什麼?它是我們擁有的輸入總數(如在MNIST數據集中是60,000個訓練圖像)還是批量大小(如128或其他)?

+1

你到底明白了什麼?你需要具體,否則它是一個重複的問題。 –

+0

假設我在keras中製作了一個類似Conv2D(64,(3,3),activation ='relu')的模型,這意味着沒有過濾器是64並且每個過濾器的大小是3 * 3。對於任何模型的第一次迭代,這些64 * 3 * 3值通過讓我們說glorot_uniform初始化,然後在model.compile中初始化,我使用sgd優化器。現在,這64位文件員將獲得新的價值。我想看到這些新的價值。 – Hitesh

+1

我知道。你鏈接的問題提供了答案。你還沒有解釋你從另一個問題中不瞭解的內容。 –

回答

2

樣品=批量大小=圖像的數量在一個批處理

Keras會經常使用None這個維度,這意味着它可以改變你不必設置。

雖然這方面確實存在,當你創建一個層,你通過input_shape沒有它:

Conv2D(64,(3,3), input_shape=(channels,rows,cols)) 
#the standard it (rows,cols,channels), depending on your data_format 

爲每個時間段(或批次)後都做的動作,你可以使用一個LambdaCallback,經過on_epoch_end功能:

#the function to call back 
def get_weights(epoch,logs): 
    wsAndBs = model.layers[indexOfTheConvLayer].get_weights() 
    #or model.get_layer("layerName").get_weights() 

    weights = wsAndBs[0] 
    biases = wsAndBs[1] 
    #do what you need to do with them 
    #you can see the epoch and the logs too: 
    print("end of epoch: " + str(epoch)) for instance 

#the callback 
from keras.callbacks import LambdaCallback 
myCallback = LambdaCallback(on_epoch_end=get_weights) 

通過這個回調訓練功能:

model.fit(...,...,... , callbacks=[myCallback]) 
+0

我在mnist數據集中使用了批量大小= 128 – Hitesh

+1

好的,你是對的。但這個方面不應該讓我們擔心。它是自動計算的,我們不需要將它放在圖層中。我們必須把'conv2D(filers,kernel_size,input_shape =(side1,side2,channels))' –

相關問題