tensorflow中的卷积和池化层(代码片段)

greathuman greathuman     2022-11-03     737

关键词:

在官方tutorial的帮助下,我们已经使用了最简单的CNN用于Mnist的问题,而其实在这个过程中,主要的问题在于如何设置CNN网络,这和Caffe等框架的原理是一样的,但是tf的设置似乎更加简洁、方便,这其实完全类似于Caffe的python接口,但是由于框架底层的实现不一样,tf无论是在单机还是分布式设备上的实现效率都受到一致认可。

CNN网络中的卷积和池化层应该怎么设置呢?tf相应的函数是什么?具体的tutorial地址参见Tensorflow中文社区

  • 卷积(Convolution)
  1. conv2d: 一般卷积。函数原型:

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

  2. depthwise_conv2d:深度卷积。

    tf.nn.depthwise_conv2d(input, filter, strides, padding, name=None)

  3. separable_conv2d: 深度可分离卷积。

    tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, name=None)

上篇关于Mnist,我们使用的是conv2d,下面介绍一下这个函数。

第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一。

第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维。

第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度为4,通常为[1,×,×,1],表示只在输入图中做卷积,而跟channel和batch无关,通常×是相同的。

第四个参数padding:string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的卷积方式,“SAME”表示有padding的卷积,尤其在stride=[1,1,1,1]的情况下,输入和输出的tensor维度一样,这也正是在Mnist中采用的,这种也称为HALF padding,因为p=[k/2],向下取整。而“VALID”表示无padding,不在原始输入上加任何padding,直接卷积。

第五个参数use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true。

卷积的结果就是返回一个Tensor,这个输出,就是我们常说的feature map,feature map的维度取决于卷积和池化层,这和Caffe是类似的,那就是[batch,高度,宽度,通道数=卷积核个数]。

  • 池化Pooling
  1. avg_pool:平均池化。函数原型:

    tf.nn.avg_pool(value, ksize, strides, padding, name=None)

  2. max_pool:最大池化。函数原型: 

    tf.nn.max_pool(value, ksize, strides, padding, name=None)

  3. max_pool_with_argmax:计算池化区域中元素的最大值和该最大值所在的位置。函数原型:

    tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None)

Mnist中使用的是max_pool方式,其和卷积类似。

第一个参数value:池化的输入,池化层通常接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape。

第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],同理不在batch和channels上做池化,所以这两个维度设为了1,通常height=width。

第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1],步长为2,即为减半。

第四个参数padding:和卷积类似,可以取’VALID’ 或者’SAME’。

返回一个Tensor,类型不变,仍是feature map。其shape也是[batch, height, width, channels]这种形式。

tensorflow一文弄懂cnn中的padding参数(代码片段)

...使用卷积神经网络CNN来对图像进行特征提取,当我们使用TensorFlow搭建自己的CNN时,一般会使用TensorFlow中的卷积函数和池化函数来对图像进行卷积和池化操作,而这两种函数中都存在参数padding,该参数的设置很容易引起错误,所... 查看详情

深度学习之卷积和池化

转载:http://www.cnblogs.com/zf-blog/p/6075286.html卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC(1)卷积层:用它来进行特征提取,如下:输入图像是32*32*3,3是它的深度(即R、G、B),... 查看详情

courseratensorflow基础课程-week3(代码片段)

EnhancingVisionwithConvolutionalNeuralNetworks参考:Ubuntu16安装TensorFlow及Jupyternotebook安装TensorFlow。本篇博客翻译来自IntroductiontoTensorFlowforArtificialIntelligence,MachineLearning,andDeepLearning仅供学习、交流等非盈利性质使用!!!其... 查看详情

courseratensorflow基础课程-week3(代码片段)

EnhancingVisionwithConvolutionalNeuralNetworks参考:Ubuntu16安装TensorFlow及Jupyternotebook安装TensorFlow。本篇博客翻译来自IntroductiontoTensorFlowforArtificialIntelligence,MachineLearning,andDeepLearning仅供学习、交流等非盈利性质使用!!!其... 查看详情

卷积神经网络——池化层学习——最大池化(代码片段)

池化层(Poolinglayers)除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下。先举一个池化层的例子,然后我们再讨论池化层的必要... 查看详情

tensorflow训练mnist数据集——卷积神经网络(代码片段)

   前面两篇随笔实现的单层神经网络 和多层神经网络, 在MNIST测试集上的正确率分别约为90%和96%。在换用多层神经网络后,正确率已有很大的提升。这次将采用卷积神经网络继续进行测试。 1、模型基本结构 ... 查看详情

『tensorflow』读书笔记_简单卷积神经网络

...ride=2正好实现1/2变换网络实现#Author:Hellcat#Time:2017/12/7importtensorflowa 查看详情

大厂必考深度学习算法面试题总结(代码片段)

目录目录一,滤波器与卷积核二,卷积层和池化输出大小计算三,深度学习框架的张量形状格式四,Pytorch、Keras的池化层函数理解五,Pytorch和Keras的卷积层函数理解六,softmax回归七,交叉熵损失函数八,感受野理解九,卷积和... 查看详情

对输入图像进行卷积和池化后如何计算输出大小

...age【发布时间】:2017-10-2620:34:45【问题描述】:当我使用tensorflow教程学习深度mnist时,在对输入图像进行卷积和池化后,我遇到了关于输出大小的问题。在教程中我们可以看到:W_conv1=weight_variable([ 查看详情

卷积层,池化层等,前向/反向传播原理讲解(代码片段)

今天闲来无事,考虑到以前都没有好好研究过卷积层、池化层等等的前向/反向传播的原理,所以今天就研究了一下,参考了一篇微信好文,讲解如下:参考链接:https://www.zybuluo.com/hanbingtao/note/485480      &nbs... 查看详情

cnn中池化层的作用?池化有哪些操作?(代码片段)

...可以有效的缩小参数矩阵的尺寸,从而减少最后连接层的中的参数数量。所以加入池化层可以加快计算速度和防止过拟合的作用。注:池化层一般在卷积层后下面来感性理解一下Pooling操作提出的背景,在深度学习任务中,肯定... 查看详情

聊聊池化层和步长为2的卷积层(代码片段)

摘要:对于池化层和步长为2的卷积层来说,个人的理解是这样的,池化层是一种先验的下采样方式,即人为的确定好下采样的规则;而对于步长为2的卷积层来说,其参数是通过学习得到的,采样的规则是不确定的。本文分享自... 查看详情

lenet5详细原理(含tensorflow版源码)(代码片段)

#勤写标兵挑战赛#LeNet5原理        Lenet5是一种深度学习模型,也是卷积神经网络(CNN)的一种。它是由YannLeCun等人在1998年提出的,主要用于手写数字识别任务。        Lenet5的网络结构由七个层组成,... 查看详情

深度学习笔记-vgg(池化)(代码片段)

目录VGG池化层VGGAlexNet在LeNet的基础上增加了3个卷积层更大更深的AlexNet(重复的VGG块)使用可重复使用的卷积块来构建深度卷积神经网络不同的卷积块个数和超参数可以得到不同复杂度的变种连续使用数个相同的填充为1、窗口形状... 查看详情

tensorflow卷积/反卷积-池化/反池化操作详解(代码片段)

Pleseseethis answer foradetailedexampleofhow tf.nn.conv2d_backprop_input and tf.nn.conv2d_backprop_filter inanexample.In tf.nn,thereare4closelyrelated2dconvfunctions 查看详情

第十四节,tensorflow中的反卷积,反池化操作以及gradients的使用(代码片段)

反卷积是指,通过测量输出和已知输入重构未知输入的过程。在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程。反卷积有着许多特别的应用,一般可以用... 查看详情

学习笔记tf014:卷积层激活函数池化层归一化层高级层

...卷积层,减少过拟合,加速训练过程,降低内存占用率。TensorFlow加速所有不同类弄卷积层卷积运算。tf.nn.depthwise_conv2d,一个卷积层输出边接到另一个卷积层输入,创建遵循Inception架构网络RethinkingtheInceptionArchitect 查看详情

利用tensorflow实现卷积神经网络模型

首先看一下卷积神经网络模型,如下图:卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC池化层:为了减少运算量和数据维度而设置的一种层。 代码如下:n_input=784#28*28的灰... 查看详情