3d卷积层

本讲提要

接着上次的内容,继续说说keras的卷积

  • 三维卷积Conv3D
  • 转置卷积ConvTranspose
  • 裁剪层Cropping
  • 零填充层ZeroPadding

1 Conv3D

1
keras.layers.Conv3D(filters, kernel_size, strides=(1, 1, 1), padding='valid', data_format=None, dilation_rate=(1, 1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

不同维数的卷积区别在于输入层、卷积核以及输出层的维数不同。

3dconv

图1 三维卷积[1]

2 转置卷积

对转置卷积的需求通常来自于使用与普通卷积相反方向的转换的愿望,即,从具有某些卷积输出形状的东西到具有其输入形状的东西,同时保持与上述卷积兼容的连接模式。可以简单地理解为把卷积结果还原成卷积前的矩阵。

转置卷积也被称为分数步长卷积,下图是一个stride = 1/2 的示意图,蓝色部分是输入,蓝绿色矩阵是输出,灰色是卷积核。

padding_strides_transposed

图二 Conv2DTranspose with padding,stride[2]

1
keras.layers.Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

裁剪层

对输入做裁剪的层

1
Cropping2D:keras.layers.Cropping2D(cropping=((0, 0), (0, 0)), data_format=None)

cropping后的两个tuple被解释为: ((top_crop, bottom_crop), (left_crop, right_crop))

上采样层

上采样指的是任何可以让图像变成更高分辨率的技术。UpSampling2D可以看作是Pooling的反向操作,就是采用最近邻插值来对图像进行放大。upsampling2D可用于应对一些需要大尺寸图片来作为输入的任务,比如GAN对抗网络。

UpSampling2D

1
keras.layers.UpSampling2D(size=(2, 2), data_format=None, interpolation='nearest')

##零填充层

ZeroPadding用于为矩阵周围填充0

1
keras.layers.ZeroPadding2D(padding=(1, 1), data_format=None)

2D 输入的零填充层(例如图像)。该层可以在图像张量的顶部、底部、左侧和右侧添加零表示的行和列。

[1]三维卷积: http://inhi.kim/archives/1146

[2]转置卷积: https://github.com/vdumoulin/conv_arithmetic