1. 导入keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
2. Conv2D
构建卷积层。用于从输入的高维数组中提取特征。卷积层的每个过滤器就是一个特征映射,用于提取某一个特征,过滤器的数量决定了卷积层输出特征个数,或者输出深度。因此,图片等高维数据每经过一个卷积层,深度都会增加,并且等于过滤器的数量。
Conv2D(filters, kernel_size, strides, padding, activation=‘relu’, input_shape)
filters
: 过滤器数量kernel_size
: 指定(方形)卷积窗口的高和宽的数字strides
: 卷积步长, 默认为 1padding
: 卷积如何处理边缘。选项包括 ‘valid’ 和 ‘same’。默认为 ‘valid’activation
: 激活函数,通常设为relu
。如果未指定任何值,则不应用任何激活函数。强烈建议你向网络中的每个卷积层添加一个 ReLU 激活函数input_shape
: 指定输入层的高度,宽度和深度的元组。当卷积层作为模型第一层时,必须提供此参数,否则不需要
示例1:构建一个CNN,输入层接受的是 200 × 200 200 \times 200 200×200 像素的灰度图片;输入层后面是卷积层,具有 16 个过滤器,宽高分别为 2;在进行卷积操作时,我希望过滤器每次跳转 2 个像素。并且,不希望过滤器超出图片界限之外,就是说,不用0填充图片。
Conv2D(filters=16, kernel_size=2, strides=2, activation='relu', input_shape=(200, 200, 1))
示例2:在示例1卷积层后再增加一层卷积层。新的卷积层有 32 个过滤器,每个的宽高都是 3。在进行卷积操作时,希望过滤器每次移动1个像素。并且希望卷积层查看上一层级的所有区域,因此,不介意在进行卷积操作时是否超过上一层级的边缘。
Conv2D(filters=32, kernel_size=3, padding='same', activation='relu')
示例3:简化写法。创建具有 64 个过滤器,每个的过滤器大小是 2 × 2 2 \times 2 2