如何理解卷积模型

时间:2019-10-31 20:54:29

标签: keras

这是我第一次使用keras.sequential创建卷积模型。下面是代码,我不明白摘要部分的含义。

from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

from keras.models import Sequential
from keras import optimizers

model = Sequential()

model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', 
                 input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='sigmoid'))


model.compile(loss='binary_crossentropy',
              optimizer=optimizers.RMSprop(),
              metrics=['accuracy'])
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 148, 148, 16)      448       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 74, 74, 16)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 72, 72, 64)        9280      
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 36, 36, 64)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 34, 34, 128)       73856     
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 17, 17, 128)       0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 36992)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 512)               18940416  
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 513       
=================================================================
Total params: 19,024,513
Trainable params: 19,024,513
Non-trainable params: 0

1 个答案:

答案 0 :(得分:1)

model.summary()为您提供有关模型的每一层的输出形状和参数数量的信息。例如,第一层“ conv2d_1”对应于您的python代码中的第一层

model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', 
                 input_shape=input_shape))

它告诉您该层的输出具有形状(无,148、148、16)。 “无”是指样品/批次的尺寸,通常在Keras模型中未​​指定。它是根据实际输入数据自动推断的。其余形状表示您拥有148x148x16数据,您可以将其视为148x148的16张图像的堆栈。 “ 16”来自

中的第一个参数
Conv2D(16,...

参数是图层中权重的数量,我相信它们都是可以训练的。这告诉您有关模型的复杂性以及以相对方式训练所需的时间-更多参数,更多处理等...

其余各行都有类似的分析。我希望这会有所帮助。