首页 > 其他分享 >Tensorflow中常用的卷积函数

Tensorflow中常用的卷积函数

时间:2023-02-21 17:08:38浏览次数:54  
标签:函数 卷积 filter tf input np Tensorflow data


卷积函数

(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)

结果如下:

Tensorflow中常用的卷积函数_tensorflow

(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)

结果如下:

Tensorflow中常用的卷积函数_卷积函数_02

(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)

结果如下:

Tensorflow中常用的卷积函数_卷积_03

(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)

结果如下:

Tensorflow中常用的卷积函数_深度学习_04

(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)

结果如下:

Tensorflow中常用的卷积函数_卷积_05


标签:函数,卷积,filter,tf,input,np,Tensorflow,data
From: https://blog.51cto.com/u_15969421/6076769

相关文章