2016-11-22 59 views
2

在Keras中,我們可以如下定義網絡。有沒有什麼方法可以在每一層之後輸出形狀。舉例來說,我想定義inputs線後打印出的inputs的形狀,然後定義conv1行後打印出的conv1形狀等在網絡結構中打印出每層的形狀

inputs = Input((1, img_rows, img_cols)) 
conv1 = Convolution2D(64, 3, 3, activation='relu', init='lecun_uniform', W_constraint=maxnorm(3), border_mode='same')(inputs) 
conv1 = Convolution2D(64, 3, 3, activation='relu', init='lecun_uniform', W_constraint=maxnorm(3), border_mode='same')(conv1) 
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) 

conv2 = Convolution2D(128, 3, 3, activation='relu', init='lecun_uniform', W_constraint=maxnorm(3), border_mode='same')(pool1) 
conv2 = Convolution2D(128, 3, 3, activation='relu', init='lecun_uniform', W_constraint=maxnorm(3), border_mode='same')(conv2) 
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) 

回答

0

如果層具有單個節點(即,如果它不是一個共享層),就可以得到其輸入張量,輸出張量,輸入通過形狀和輸出形狀:layer.input_shape

from keras.utils.layer_utils import layer_from_config 

config = layer.get_config() 
layer = layer_from_config(config) 

來源: https://keras.io/layers/about-keras-layers/

可能是這樣做的最簡單的方法:

model.layers[layer_of_interest_index].output_shape 
+0

您可以詳細說明如何使用它嗎?例如,我想打印出pool1的信息。我試過配置= pool1.get_config(),它沒有工作。 – user288609

+0

編輯了答案。請檢查 –

5

只是使用model.summary(),它給你漂亮的打印。

0

要打印完整的模型和所有的依賴,你也可以看看這裏:https://keras.io/visualization/

我用這個命令我的模型可視化保存爲png:

from keras.utils.visualize_util import plot 
plot(model, to_file='model.png') 

如果你只想打印層的形狀,你可以做這樣的事情:

layer = model.layers[-1] 
print(layer.output._keras_shape) 

打印: (None,1,224,224)#Nr。過濾器,通道,x_dim,y_dim

+0

謝謝。如果我只想打印一個特定的圖層,即pool1,該怎麼做? – user288609

+0

最簡單的方法是命名圖層,然後使用model.get_layer('pool1')找到它。 –