keras中的卷积层&池化层的用法
卷积层
创建卷积层
首先导入keras中的模块
fromkeras.layersimportConv2D
卷积层的格式及参数:
Conv2D(filters,kernel_size,strides,padding,activation='relu',input_shape)
filters:过滤器数量
kernel_size:指定卷积窗口的高和宽的数字
strides:卷积stride,如果不指定任何值,则strides设为1
padding:选项包括'valid'和'same',默认值为'valid'
activation:通常为'relu',如果不指定任何值,则不应用任何激活函数,通常应该向网络中每个卷积层添加一个Relu激活函数
如果卷积层出现在输入层之后,必须提供另一个input_shape参数:
input_shape:指定输入的高度、宽度和深度的元组;如果卷积层不是网络的第一个层级,则不应该包含input_shape参数。
示例1:
假设我要构建一个CNN,输入层接受的是200x200像素(对应于高200、宽200、深1的三维数组)的灰度图片。然后,假设我希望下一层级是卷积层,具有16个过滤器,每个宽和高分别为2。在进行卷积操作时,我希望过滤器每次跳转2个像素。并且,我不希望过滤器超出图片界限之外;也就是说,我不想用0填充图片。
要构建该卷积层,我将使用下面的代码
Conv2D(filters=16,kernel_size=2,strides=2,activation='relu',input_shape=(200,200,1))
示例2
假设我希望CNN的下一层级是卷积层,并将示例1中构建的层级作为输入。假设新层级是32个过滤器,每个的宽和高都是3。在进行卷积操作时,我希望过滤器每次移动1个像素。我希望卷积层查看上一层级的所有区域,因此不介意过滤器在进行卷积操作时是否超过上一层级的边缘。
然后,要构建此层级,我将使用以下代码:
Conv2D(filters=32,kernel_size=3,padding='same',activation='relu')
卷积层中的参数数量
卷积层中的参数数量取决于filters,kernel_size,input_shape的值
K:卷积层中的过滤器数量,K=filters
F:卷积过滤器的高度和宽度,F=kernal_size
D_in:上一层级的深度,D_in是input_shape元组中的最后一个值
卷积层中的参数数量计算公式为:K*F*F*D_in+K
卷积层的形状
卷积层的形状取决于kernal_size,input_shape,padding,stride的值
K:卷积层中的过滤器数量,K=filters
F:卷积过滤器的高度和宽度,F=kernal_size
H_in:上一层级的高度
W_in:上一层级的宽度
S:stride
卷积层的深度始终为过滤器数量K
如果padding=‘same',那么卷积层的空间维度计算公式如下:
height=ceil(float(H_in)/float(S))
width=ceil(float(W_in)/float(S))
如果padding=‘valid',那么卷积层的空间维度计算公式如下:
height=ceil(float(H_in-F+1)/float(S))
width=ceil(float(W_in-F+1)/float(S))
可以使用如下形式检测卷积层的维度:
fromkeras.modelsimportSequential fromkeras.layersimportConv2D model=Sequential() model.add(Conv2D(filters=32,kernel_size=3,strides=2,padding='same', activation='relu',input_shape=(128,128,3))) model.summary()
池化层
keras中的最大池化层
创建池化层,首先导入keras中的模块
fromkeras.layersimportMaxPooling2D
然后用以下形式创建池化层
MaxPooling2D(pool_size,strides,padding)
参数
pool_size:指定池化窗口高度和宽度的数字
strides:垂直和水平stride,默认参数为pool_size
padding:选项包括'valid'和'same',默认参数为'valid'
示例:
假设我要构建一个CNN,并且我想通过在卷积层后面添加最大池化层,降低卷积层的维度。假设卷积层的大小是(100,100,15),我希望最大池化层的大小为(50,50,15)。
要实现这一点,我可以在最大池化层中使用2x2窗口,stride设为2,代码如下:
MaxPooling2D(pool_size=2,strides=2)
如果你想将stride设为1,但是窗口大小依然保留为2x2,则使用以下代码:
MaxPooling2D(pool_size=2,strides=1)
可以使用如下形式检测最大池化层的维度:
fromkeras.modelsimportSequential fromkeras.layersimportMaxPooling2D model=Sequential() model.add(MaxPooling2D(pool_size=2,strides=2,input_shape=(100,100,15))) model.summary()
以上这篇keras中的卷积层&池化层的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。