Tensorflow中常用的卷积函数

卷积函数

(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: (可选)为这个操作取一个名字。
import tensorflow as tf
import numpy as np
input_data = tf.Variable(np.random.rand(10,9,9,3), dtype=np.float32)
filter_data = tf.Variable(np.random.rand(2,2,3,2), dtype=np.float32)
y = tf.nn.conv2d(input_data, filter_data, strides = [1,1,1,1],padding='SAME')
tf.shape(y)

结果如下:
在这里插入图片描述

(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。
input_data = tf.Variable(np.random.rand(10,9,9,3), dtype=np.float32)
filter_data = tf.Variable(np.random.rand(2,2,3,5), dtype=np.float32)
y = tf.nn.depthwise_conv2d(input_data, filter_data, strides=[1,1,1,1], padding='SAME')
tf.shape(y)

结果如下:
在这里插入图片描述

(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卷积之后的混合卷积。

input_data = tf.Variable(np.random.rand(10,9,9,3), dtype=np.float32)
depthwise_filter = tf.Variable(np.random.rand(2,2,3,5),dtype=np.float32)
pointwise_filter = tf.Variable(np.random.rand(1,1,15,20),dtype=np.float32)
y = tf.nn.separable_conv2d(input_data, depthwise_filter, pointwise_filter,strides=[1,1,1,1],padding='SAME')

tf.shape(y)

结果如下:
在这里插入图片描述

(5)计算Atrous卷积(孔卷积/扩张卷积)

tf.nn.atrous_conv2d(value, filters, rate, padding, name=None)

input_data = tf.Variable(np.random.rand(1,5,5,1), dtype=np.float32)
filters = tf.Variable(np.random.rand(3,3,1,1), dtype=np.float32)
y = tf.nn.atrous_conv2d(input_data, filters, 2, padding='SAME')
tf.shape(y)

结果如下:
在这里插入图片描述

(6)进行conv2d的转置

tf.nn.conv2d_transpose(value, filter, output_shape, strides, padding=‘SAME’, data_format=‘NHWC’, name=None)

  • output_shape: 一维的张量,表示反卷积运算后输出的形状。
x = tf.random.normal(shape=[1,3,3,1])
kernel = tf.random.normal(shape=[2,2,3,1])
y = tf.nn.conv2d_transpose(x, kernel, output_shape=[1,5,5,3],strides=[1,2,2,1],padding='SAME')
tf.shape(y)

结果如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值