【二】TensorFlow神经网络模型构建之卷积函数

卷积函数是构建神经网络的重要支架,是在一批图像上扫描的二维过滤器

  1. tf.nn.convolution(input,filter,padding,strides=None,dilation_rate=None,name=None,data_format=None)该函数计算N维卷积的和。
  2. tf.nn.conv2d(input,filter,padding,strides,use_cudnn_on_gpu=None,name=None,data_format=None)对一个维的输入数据input和维的卷积核filter进行操作,然后对输入数据进行一个二维的卷积操作,最后得到卷积之后的结果。函数参数说明:
tf.nn.conv2d(input,filter,strides,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:一个可选布尔值,是否使用英伟达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')

在这里插入图片描述
3. tf.nn.depthwise_conv2d(input,filter,strides,padding,rate=None,data_format=None)输入张量(input)的数据维度是[batch,in_height,in_width,in_channels],卷积核(filter)的维度是[filter_height,filter_width,in_channels,channel_multiplier],在通道in_channels上面的卷积深度是1,depthwise_conv2d函数将不同的卷积核独立地应用在in_channels的每个通道上(从通道1到通道channel_multiplier),然后把所有的结果进行汇总。最后输出通道的总数是 i n _ c h a n n e l s × c h a n n e l _ m u l t i p l i e r in\_channels \times channel\_multiplier in_channels×channel_multiplier,示例代码片段如下:

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,5),dtype=np.float32)
y=tf.nn.depthwise_conv2d(input_data,filter_data,strides=[1,1,1,1],padding='SAME')

在这里插入图片描述
4. tf.nn.separable_conv2d(input,depthwise_filter,pointwise_filter,strides,padding,rate=None,name=None,data_format=None)利用几个分离的卷积核去做卷积。在这个API中,将应用一个二维的卷积核,在每个通道上,以深度channel_multiplier进行卷积。部分参数说明:

depthwise_filter: 一个tensor,数据维度是四维[filter_height,filter_width,in_channels,channel_multiplier],其中in_channels卷积深度是1。
pointwise_filter:一个tensor,数据维度是四维[1,1,channel_multiplier?in_channels,out_channels],其中pointwise_filter是在depthwise_filter卷积之后的混合卷积。

使用示例代码如下:

import tensorflow as tf
import numpy as np
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')

在这里插入图片描述
5. tf.nn.atrous_conv2d(value,filter,rate,padding,name=None)计算Atrous卷积,又称卷积或者扩张卷积。使用示例:

import tensorflow as tf
import numpy as np
input_data=tf.Variable(np.random.rand(1,5,5,1),dtype=np.float32)
filter_data=tf.Variable(np.random.rand(3,3,1,1),dtype=np.float32)
y=tf.nn.atrous_conv2d(input_data,filter_data,2,padding='SAME')

在这里插入图片描述
6. tf.nn.conv2d_transpose(value,filter,output_shape,strides,padding='SAME',data_format='NHWC',name=None)在解卷积网络中有时称为反卷积,但实际是conv2d的转置,使用示例代码:

import tensorflow as tf
input_data=tf.compat.v1.random_normal(shape=[1,3,3,1])
filter_data=tf.compat.v1.random_normal(shape=[2,2,3,1])
y=tf.nn.conv2d_transpose(input_data,filter_data,output_shape=[1,5,5,3],strides=[1,2,2,1],padding='SAME')

在这里插入图片描述
7. tf.nn.conv1d(input,filter,strides,padding,data_format=None,name=None)该函数是用来计算给定三维的输入和过滤器的情况下的一维卷积,输入input是三维,如[batch,in_width,in_channels],卷积核filters也是三维,如[]filter_width,in_channels,out_channels]。strides是一个整数,代表卷积核移动每一步的长度。

  1. tf.nn.conv3d(input,filter,strides,padding,name=None)该函数是用来计算给定五维的输入和过滤器的情况下的三维卷积,与二维卷积相比:
    • input 的shape中多一维in_depth,形状为Shape[batch,in_depth,in_height,in_width,in_channels]
    • filter的shapt中多一维filter_depth,由[filter_depth,filter_height,filter_width]构成卷积核的大小。
    • strides中多一维变为[strides_batch,strides_depth,strides_height,strides_width,strides_channel],必须保证strides[0]=strides[4]=1
  2. tf.nn.conv3d_transpose(input,filter,output_shape,strides,,padding='SAME',name=None)和二维反卷积(转置)类似。

相关推荐

  1. CNN神经网络,TensorFlow面试题

    2024-03-27 08:10:04       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 08:10:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 08:10:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 08:10:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 08:10:04       20 阅读

热门阅读

  1. Aapche Nutch建立自己的搜索引擎

    2024-03-27 08:10:04       16 阅读
  2. 数据分析中常用的9大算法原理

    2024-03-27 08:10:04       21 阅读
  3. document.getElementById(‘username‘).value 是什么

    2024-03-27 08:10:04       17 阅读
  4. Jmeter 聚合报告之 90% Line 正确理解

    2024-03-27 08:10:04       15 阅读
  5. ASP.NET单选框与多选框值获取

    2024-03-27 08:10:04       15 阅读
  6. C#学习笔记

    2024-03-27 08:10:04       19 阅读
  7. Redis的持久化机制是怎样的?

    2024-03-27 08:10:04       20 阅读
  8. Day58| 739 每日温度 496 下一个更大元素 I

    2024-03-27 08:10:04       21 阅读
  9. Django——Ajax请求

    2024-03-27 08:10:04       16 阅读