tf.nn的conv2d卷积与max_pool池化
Posted ting-light
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于tf.nn的conv2d卷积与max_pool池化的主要内容,如果未能解决你的问题,请参考以下文章
tf.nn.conv2d函数和tf.nn.max_pool函数介绍
CNN之池化层tf.nn.max_pool|tf.nn.avg_pool|tf.reduce_mean
tf.nn.conv2d 和 tf.nn.max_pool 中 padding 分别为 'VALID' 和 'SAME' 的直觉上的经验和测试代码