【二】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进行操作,然后对输入数据进行一个二维的卷积操作,最后得到卷积之后的结果。函数参数说明:
python 复制代码
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: 为该操作取个名字
'''

使用代码示例如下:

python 复制代码
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')
  1. 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,示例代码片段如下:
python 复制代码
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')
  1. tf.nn.separable_conv2d(input,depthwise_filter,pointwise_filter,strides,padding,rate=None,name=None,data_format=None)利用几个分离的卷积核去做卷积。在这个API中,将应用一个二维的卷积核,在每个通道上,以深度channel_multiplier进行卷积。部分参数说明:
python 复制代码
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卷积之后的混合卷积。

使用示例代码如下:

python 复制代码
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')
  1. tf.nn.atrous_conv2d(value,filter,rate,padding,name=None)计算Atrous卷积,又称卷积或者扩张卷积。使用示例:
python 复制代码
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')
  1. tf.nn.conv2d_transpose(value,filter,output_shape,strides,padding='SAME',data_format='NHWC',name=None)在解卷积网络中有时称为反卷积,但实际是conv2d的转置,使用示例代码:
python 复制代码
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')
  1. 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是一个整数,代表卷积核移动每一步的长度。

  2. 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
  3. tf.nn.conv3d_transpose(input,filter,output_shape,strides,,padding='SAME',name=None)和二维反卷积(转置)类似。

相关推荐
热爱跑步的恒川29 分钟前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
阡之尘埃2 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
孙同学要努力4 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20214 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
其实吧36 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
丕羽6 小时前
【Pytorch】基本语法
人工智能·pytorch·python
ctrey_6 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
SongYuLong的博客6 小时前
Air780E基于LuatOS编程开发
人工智能
Jina AI6 小时前
RAG 系统的分块难题:小型语言模型如何找到最佳断点?
人工智能·语言模型·自然语言处理
-派神-6 小时前
大语言模型(LLM)量化基础知识(一)
人工智能·语言模型·自然语言处理