keras層的name必須獨一無二

哈嘍,大家好,我回來了。

在家辦公先用Keras寫個CNN,然後複製粘貼幾層,發現沒改每層的命名,發現報錯。

ValueError: The name "BN" is used 3 times in the model. All layer names should be unique.

因此都修改後沒毛病了。

import keras

inputs=keras.Input(shape=(229,229,3),name='input')
x=keras.layers.Conv2D(32,kernel_size=(3,3),strides=(2,2),padding='valid',name='Conv2D1')(inputs)
x=keras.layers.BatchNormalization(name='BN1')(x)
x=keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2),padding='valid',name='MaxPool1')(x)

x=keras.layers.Conv2D(64,kernel_size=(3,3),strides=(2,2),padding='valid',name='Conv2D2')(x)
x=keras.layers.BatchNormalization(name='BN2')(x)
x=keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2),padding='valid',name='MaxPool2')(x)

x=keras.layers.Conv2D(128,kernel_size=(3,3),strides=(2,2),padding='valid',name='Conv2D3')(x)
x=keras.layers.BatchNormalization(name='BN3')(x)
outputs=keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2),padding='valid',name='MaxPool3')(x)


model=keras.Model(inputs=inputs,outputs=outputs)
model.summary()
Layer (type)                 Output Shape              Param #   
=================================================================
input (InputLayer)           (None, 229, 229, 3)       0         
_________________________________________________________________
Conv2D1 (Conv2D)             (None, 114, 114, 32)      896       
_________________________________________________________________
BN1 (BatchNormalization)     (None, 114, 114, 32)      128       
_________________________________________________________________
MaxPool1 (MaxPooling2D)      (None, 57, 57, 32)        0         
_________________________________________________________________
Conv2D2 (Conv2D)             (None, 28, 28, 64)        18496     
_________________________________________________________________
BN2 (BatchNormalization)     (None, 28, 28, 64)        256       
_________________________________________________________________
MaxPool2 (MaxPooling2D)      (None, 14, 14, 64)        0         
_________________________________________________________________
Conv2D3 (Conv2D)             (None, 6, 6, 128)         73856     
_________________________________________________________________
BN3 (BatchNormalization)     (None, 6, 6, 128)         512       
_________________________________________________________________
MaxPool3 (MaxPooling2D)      (None, 3, 3, 128)         0         
=================================================================
Total params: 94,144
Trainable params: 93,696
Non-trainable params: 448

顯而易見,每次卷積後的厚度(channel)都會改變,而BN層和Pool層不改變厚度;並且卷積核(filters)個數恰好是該層的厚度,除非有卷積出現或RNN

此外也可查看模型的輸入和輸出是什麼,包括節點名和shape

>>> model.inputs
[<tf.Tensor 'input:0' shape=(?, 229, 229, 3) dtype=float32>]
>>> model.outputs
[<tf.Tensor 'MaxPool3/MaxPool:0' shape=(?, 3, 3, 128) dtype=float32>]

 

另外有相關問題可以加入QQ羣討論,不設微信羣

QQ羣:868373192 

語音圖像視頻深度-學習羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章