CNN 卷积神经网络 2
学习资料:
这一次我们会说道 CNN 代码中怎么定义 Convolutional 的层和怎样进行 pooling.
基于上一次卷积神经网络的介绍,我们在代码中实现一个基于MNIST数据集的例子
定义卷积层的 weight bias ¶
首先我们导入
import tensorflow as tf
采用的数据集依然是tensorflow
里面的mnist
数据集
我们需要先导入它
python from tensorflow.examples.tutorials.mnist import input_data
本次课程代码用到的数据集就是来自于它
mnist=input_data.read_data_sets('MNIST_data',one_hot=true)
接着呢,我们定义Weight
变量,输入shape
,返回变量的参数。其中我们使用tf.truncted_normal
产生随机变量来进行初始化:
def weight_variable(shape):
inital=tf.truncted_normal(shape,stddev=0.1)
return tf.Variable(initial)
同样的定义biase
变量,输入shape
,返回变量的一些参数。其中我们使用tf.constant
常量函数来进行初始化:
def bias_variable(shape):
initial=tf.constant(0.1,shape=shape)
return tf.Variable(initial)
定义卷积,tf.nn.conv2d
函数是tensoflow
里面的二维的卷积函数,x
是图片的所有参数,W
是此卷积层的权重,然后定义步长strides=[1,1,1,1]
值,strides[0]
和strides[3]
的两个1是默认值,中间两个1代表padding时在x方向运动一步,y方向运动一步,padding采用的方式是SAME
。
def conv2d(x,W):
return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')
定义 pooling ¶
接着定义池化pooling
,为了得到更多的图片信息,padding时我们选的是一次一步,也就是strides[1]=strides[2]=1
,这样得到的图片尺寸没有变化,而我们希望压缩一下图片也就是参数能少一些从而减小系统的复杂度,因此我们采用pooling
来稀疏化参数,也就是卷积神经网络中所谓的下采样层。pooling
有两种,一种是最大值池化,一种是平均值池化,本例采用的是最大值池化tf.max_pool()
。池化的核函数大小为2x2,因此ksize=[1,2,2,1]
,步长为2,因此strides=[1,2,2,1]
:
def max_poo_2x2(x):
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1])
好啦,如果你对本节课内容已经了解,下一次课我们将构建卷积神经网络的架构~
分享到:
如果你觉得这篇文章或视频对你的学习很有帮助, 请你也分享它, 让它能再次帮助到更多的需要学习的人.
UnityTutorial没有正式的经济来源, 如果你也想支持 UnityTutorial 并看到更好的教学内容, 赞助他一点点, 作为鼓励他继续开源的动力.