IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> TensorFlow 卷积计算函数理解 -> 正文阅读

[人工智能]TensorFlow 卷积计算函数理解

tensorflow中用于卷积操作的函数主要为 tf.nn.conv2d,为了自己做的记录

函数定义

tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

参数说明

  • input:输入待被卷积的张量,具体格式为 [batch, in_height, in_width, in_channels] , 这里 batch 是一次处理几个 in_height, in_width, in_channels 这么大的图片(可以这么认为吧,或 feature map 也可以),in_height, in_width, in_channels 分别是图片的维度,一般都是方的,即长宽一样。
  • filter:用于卷积的卷积核,具体格式为[filter_height, filter_width, in_chanels, out_channels],filter_height, filter_width 为单个卷积核的维度,in_channels 是待卷积图片的通道数,out_channels 是卷积后的 feature map 的通道数,看过多通道卷积的具体的操作就明白怎回事了
    多通道卷积示意图看这里
  • strides:卷积核在卷积的时候在每一维移动的步长,具体格式为 [1, stride, stride,1] ,两边必须都是1,我也不知道为什么
  • padding:有两个选择 “VALID”, “SAME”; 简单来说,VALID在计算时不会加边,就是常说的 padding,如果边长不够,这种卷积操作会直接把不够的地方舍掉,不做卷积了;SAME在计算卷积时会加 paddingSAME 具体加多少边填充的计算公式为
    (待卷积图片的维度/卷积核的维度)上取整
  • use_cudnn_on_gpu:是否使用 cudnn 加速,bool类型,默认是 true.
  • 后边的参数就没有了解了,因为目前还没用到

在 Tensorflow 的 nn_ops.py 中有关于卷积运算输出尺寸的定义

If padding == "SAME":
  output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])
If padding == "VALID":
  output_spatial_shape[i] =
    ceil((input_spatial_shape[i] -
          (spatial_filter_shape[i]-1) * dilation_rate[i])
         / strides[i]).

下面是自己做测试验证自己理解


## python 版本 3.7.4,tensorflow 版本 2.3.0, windows10 命令行
## 我只是想看看维度运算是否正确,因为并没有看具体计算值是多少,只看了维度是否正确,这些计算结果和手算结果是一致的

import tensorflow as tf

>>> input = tf.Variable(tf.random.normal([1,5,5,3]))
>>> filter = tf.Variable(tf.random.normal([3,3,3,4]))
>>> input.shape
TensorShape([1, 5, 5, 3])
>>> filter.shape
TensorShape([3, 3, 3, 4])
>>> output = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='VALID')
>>> output.shape
TensorShape([1, 3, 3, 4])
>>> output = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')
>>> output.shape
TensorShape([1, 5, 5, 4])

>>> input1 = tf.Variable(tf.random.normal([1,6,6,3]))
>>> filter = tf.Variable(tf.random.normal([3,3,3,4]))
>>>> output1 = tf.nn.conv2d(input1, filter, strides=[1,2,2,1], paddi>>> output1.shape
TensorShape([1, 2, 2, 4])
>>> output2 = tf.nn.conv2d(input1, filter, strides=[1,2,2,1], padding = 'SAME')
>>> output2.shape
TensorShape([1, 3, 3, 4])

参考资料

  1. Tensorflow卷积中Padding的两种方式
  2. 理解tf.nn.conv2d方法
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:21:53  更:2021-09-02 11:24:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:27:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码