tf.nn的conv2d卷积与max_pool池化

tf.nn.conv2d(value,filter,strides,[...])

对于图片来说

value :   形状通常是np.array()类型的4维数组也称tensor(张量),  (batch,height,width,channels) 可以理解为(图片样本的个数,高,宽,图片的颜色通道数)

value是待卷积的数据

filter: 卷积核 -4元素元组【height,width,in_channels,out_channels】,前面的3个参数和value的后面3个参数一一对应。但是out_channels不太确定,卷积核的个数,

    如果对一个shape 为[64,40,120,32]的数据进行卷积 filter=【3,3,32,64】,padding=‘same‘,strides=[1, 1, 1, 1] ,shape就变为了[64,40,120,64].

    [3,3,32]与[40,120,32]进行对应,32=32,则相当于 【3,3】对【40,120】,卷积时以【3*3】的扫描面积在【40,120】上进行扫描,每扫描一次,在结果集上产生一个【1,1】的数据单位

起始位置为【40,120】上面的最前面【3,3】的部分,

移动步调大小为【1,1,1,1】,即上下左右每次移动都只能移动1个单位,每次只能向一个方向移动,

same表示结束位置为 卷积核与源数据重叠,只需移动一个单位则不再重叠。

    所以,对于【40,120,32】经过【3,3,32】的扫描后变成【40,120,1】,64表示经过了64次这样的扫描,于成了【40,120,64】

#SAME模式就是将滑动窗口与矩阵进行左对齐,然后向右滑动。一直滑到与矩阵最右边那一列不相交为止。

#tf.nn.conv2d(value,filter,strides) value是待卷积的数据,filter是卷积核【height,width,in_channels,out_channels】,out_channels即映射通过的卷积核的个数,w_c1则表示会通过32次【3,3,1】的卷积核
#SAME模式就是将滑动窗口与矩阵进行左对齐,然后向右滑动。一直滑到与矩阵最右边那一列不相交为止。
conv1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, w_c1, strides=[1, 1, 1, 1], padding=‘SAME‘), b_c1))#【64,40,120,32】 【60,160,32】
#tf.nn.max_pool(value,ksize,strides)池化与卷积的过程原理基本一样,ksize池化窗【batch,height,width,channels】,
#只是卷积改变的是height,width,channels,池化通常改变的是height,width
conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding=‘SAME‘) #[64,20,60,32] 【
#tf.nn.dropout()用于在训练时,以某种概率暂不启用一部分神经元
conv1 = tf.nn.dropout(conv1, keep_prob)

原文地址:https://www.cnblogs.com/Ting-light/p/9255216.html

时间: 2024-08-11 15:28:41

tf.nn的conv2d卷积与max_pool池化的相关文章

卷积特征提取与池化(Pooling)——处理大型图像

在之前的章节中,我们已经很好地解决了手写体识别问题(维数为28*28).但如果是更大的图像(维数为96*96)呢?如果你还是要学习400个特征,那么网络权重参数就有400*96*96即近400万个. 卷积特征提取 如果我们从大型彩色图像(64*64*3)中随机抽取一些小patch(8*8),学到了一些特征,然后用这些特作为滤波器去扫过整张大图,即逐行逐列做卷积.这样做可以大幅减小网络参数W的数量,然而会使输入分类器的特征维数大幅度上升. 池化 池化是在卷积特征提取的基础上,对每个卷积特征进行取平

卷积层,池化层等,前向/反向传播原理讲解

今天闲来无事,考虑到以前都没有好好研究过卷积层.池化层等等的前向/反向传播的原理,所以今天就研究了一下,参考了一篇微信好文,讲解如下: 参考链接:https://www.zybuluo.com/hanbingtao/note/485480 https://github.com/hanbt/learn_dl/blob/master/cnn.py 一.卷积层 (1)首先是卷积神经网络中的卷积操作: 计算公式为: 注意上式的使用场景:stride = 1 , channel = 1 我们可以将其扩展到

理解CNN卷积层与池化层计算

概述 深度学习中CNN网络是核心,对CNN网络来说卷积层与池化层的计算至关重要,不同的步长.填充方式.卷积核大小.池化层策略等都会对最终输出模型与参数.计算复杂度产生重要影响,本文将从卷积层与池化层计算这些相关参数出发,演示一下不同步长.填充方式.卷积核大小计算结果差异. 一:卷积层 卷积神经网络(CNN)第一次提出是在1997年,杨乐春(LeNet)大神的一篇关于数字OCR识别的论文,在2012年的ImageNet竞赛中CNN网络成功击败其它非DNN模型算法,从此获得学术界的关注与工业界的兴趣

第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用于信道均衡.图像恢复.语音识别.地震学.无损探伤等未知输入估计和过程辨识方面的问题. 在神经网络的研究中,反卷积更多的是充当可视化的作用,对于一个复杂的深度卷积网络,通过每层若干个卷积核的变换,我们无法知道每个卷积核关注的是什么,变换后的特征是什么样子.通过反卷积的还原,可以对这些问题有个清晰的可视

卷积层和池化层

卷积神经网络是在BP神经网络的改进,与BP类似,都采用了前向传播计算输出值,反向传播调整权重和偏置:CNN与标准的BP最大的不同是:CNN中相邻层之间的神经单元并不是全连接,而是部分连接,也就是某个神经单元的感知区域来自于上层的部分神经单元,而不是像BP那样与所有的神经单元相连接.CNN的有三个重要的思想架构: 局部区域感知 权重共享 空间或时间上的采样

tensorflow 卷积/反卷积-池化/反池化操作详解

Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_backprop_filter in an example. In tf.nn, there are 4 closely related 2d conv functions: tf.nn.conv2d tf.nn.conv2d_backprop_filter tf.nn.conv2d_backprop_i

CNN之池化层tf.nn.max_pool|tf.nn.avg_pool|tf.reduce_mean

摘要:池化层的主要目的是降维,通过滤波器映射区域内取最大值.平均值等操作. 均值池化:tf.nn.avg_pool(input,ksize,strides,padding) 最大池化:tf.nn.max_pool(input,ksize,strides,padding) input:通常情况下是卷积层输出的featuremap,shape=[batch,height,width,channels]              假定这个矩阵就是卷积层输出的featuremap(2通道输出)  他的s

tf.nn.conv2d 和 tf.nn.max_pool 中 padding 分别为 'VALID' 和 'SAME' 的直觉上的经验和测试代码

这个地方一开始是迷糊的,写代码做比较分析,总结出直觉上的经验. 某人若想看精准的解释,移步这个网址(http://blog.csdn.net/fireflychh/article/details/73743849),但我觉得直觉上的经验更有用,如下: 直觉上的经验: 一件确定的事: padding 无论取 'SAME' 还是取 'VALID', 它在 conv2d 和 max_pool 上的表现是一致的; padding = 'SAME' 时,输出并不一定和原图size一致,但会保证覆盖原图所有

TF-卷积函数 tf.nn.conv2d 介绍

转自 http://www.cnblogs.com/welhzh/p/6607581.html 下面是这位博主自己的翻译加上测试心得 tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 除去name参数用以指定该操作的name,与方法有关