卷积函数
(1)计算N维卷积的和
tf.nn.convolution(input, filter, padding, strides=None, dilation_rate=None,name=None,data_format=None)
(2)对一个四维的输入数据input和卷积核filter进行操作,然后对输入数据进行一个二维的卷积操作,最后得到卷积之后的结果。
tf.nn.conv2d(input, filter, padding, use_cudnn_on_gpu=None, data_format=None, Name=None)
- input: 一个Tensor。数据类型必须是float32和float64。
- filter: 一个Tensor。数据类型必须和input相同。
- strides: 一个长度是4的一维整数类型数组每一维度对应的是input中每一维度对应的移动步数。
- padding: 一个字符串,取值为SAME或者VALID。
(SAME:仅适用于全尺寸操作,即输入数据维度和输出数据维度相同。
VALID:适用于部分窗口,即输入数据和输出数据维度不同。)
- use_cudnn_on_gpu: 一个可选布尔值,默认是True。
- name: (可选)为这个操作取一个名字。
结果如下:
(3)深度可分离卷积,将不同的卷积核独立地应用在in_channels的每个通道上(从通道1到通道channel_multiplier),然后把所有结果进行汇总。最后输出通道的总数是in_channels*channels_multiplier。
tf.nn.depthwise_conv2d(input, filter, strides, padding, rate=None, name=None, data_format=None)
- 这个函数输入张量的数据维度是[batch,in_height,in_width,in_channels],卷积核的维度是[filter_height,filter_width,in_channels,channel_multiplier],在通道in_channels上面的卷积深度是1。
结果如下:
(4)利用几个分离的卷积核去做卷积。
tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, rate=None, name=None, data_format=None)
- 应用一个二维的卷积核,在每个通道上,以深度channel_multiplier
- depthwise_filter: 一个张量。数据维度是4维[filter_height, filter_width, in_channels, channel_multiplier],in_channels的卷积深度是1。
- pointwise_filter: 一个张量。数据维度是4维[1, 1, channel_multiplier*in_channels, out_channels] pointwise_filter是在depthwise_filter卷积之后的混合卷积。
结果如下:
(5)计算Atrous卷积(孔卷积/扩张卷积)
tf.nn.atrous_conv2d(value, filters, rate, padding, name=None)
结果如下:
(6)进行conv2d的转置
tf.nn.conv2d_transpose(value, filter, output_shape, strides, padding=‘SAME’, data_format=‘NHWC’, name=None)
- output_shape: 一维的张量,表示反卷积运算后输出的形状。
结果如下: