【二】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,形状为Shapebatch,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,必须保证strides0=strides4=1
  3. tf.nn.conv3d_transpose(input,filter,output_shape,strides,,padding='SAME',name=None)和二维反卷积(转置)类似。

相关推荐
ai小陈1 小时前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
测试者家园2 小时前
为什么意图驱动测试是自动化测试的下一站,而不是替代品
自动化测试·软件测试·人工智能·持续测试·ai赋能·智能化测试·软件测试变革
D202020204 小时前
TikTok Shop禁止AI语音直播落地后,跨境卖家如何通过达秘合规调整带货内容
人工智能
像风一样自由20204 小时前
20.Milvus常见问题检索不到维度错误和数据一致性
人工智能·大模型·milvus
现代野蛮人4 小时前
【深度学习实验】—— 基于 LSTM 与 Optuna 调参的丙型肝炎预测
人工智能·深度学习·lstm
支支დ4 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
ZGIAI4 小时前
ZGI 让那些"等你去处理"的事,真正跑起来
人工智能·架构
ZGIAI5 小时前
ZGI:别再做Agent Demo了,先问问它在业务里能不能撑过下周三
人工智能·架构
香芋芋圆5 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
m0_614523555 小时前
完整教程|输入一句描述,能不能直接生成一段可以继续剪辑的视频:写结构化描述到生成短样片
人工智能·音视频