TensorFlow上训练一个多层卷积神经网络

卷积层:

在这里插入图片描述

相同填充模式下: 三通道图片7x7x3 经过一个卷积核(3x3x3)+偏执(1),该图片变成一通道(3x3x1)图片。
再经过一个卷积核(3x3x3)+偏执(0),该图片变成了二通道(3X3X2)图片。

经过多层卷积之后,就是一层一层地增加网络深度,最终得到一个又深又窄的表示,这个表示就是这个图片提取的特征。然后把其连接到全连接层,然后训练分类器。

共享权重:

我们想识别图像中的动物类别,那么动物在图片中的位置(左上角、中间或是右下角)是不重要的,这叫平移不变性;再比如说,在识别数字的过程中,数字的颜色并不影响结果;又或者说,在语言处理中,一些词汇在句子中的位置并不影响其代表的含义。当两种输入可以获得同样的信息,那么我们就应该共享权重而且利用这些输入来共同训练权重

池化层:

通过卷积后,为了引入不变性,同时防止过拟合问题或欠拟合问题、降低计算量,我们常进行池化处理。池化过程如上图所示。因此池化过后,通常图像的宽度和高度会变成原来的1/2。

在这里插入图片描述

在LeNet-5中,输入层是32x32的尺寸。

  • 在第一次卷积中,使用了6个卷积核,得到了C1:6张28x28的特征图。
  • 然后进行下采样,得到S2:特征图宽、高变为原来的1/2,即28/2=14,特征图尺寸变为14x14,特征图张数不变。
  • 再进行第二次卷积,使用了16个卷积核,得到了C3:16张10x10的特征图。
  • 然后进行下采样,得到S4:特征图宽、高变为原来的1/2,即10/2=5,特征图尺寸变为5x5,特征图张数不变。
  • 之后进入卷积层C5,120张1x1全连接后的特征图,与S4全连接。

通过TensorFlow训练:

TensorFlow实际上对应的是一个C++后端,TensorFlow使用会话(Session)与后端连接。
交互式会话:

sess = tf.InteractiveSession()

sess是一个交互式会话,使得我们可以在运行图(Graph)的时候再插入计算图。

x = tf.placeholder(“float”, shape=[None,784])

x是占位符,可以在TensorFlow运行某一计算时根据该占位符输入具体的值。
None指张量shape某一维度未定,这里指batch大小未定。
(784=28X28 图片的单通道像素点,图片张数未定,多张图片构成一个batch)

y_ = tf.placeholder(“float”, shape=[None,10])

数字识别,10分类。

#初始化权重
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev = 0.1)//从截断正太分布中输出标准差为0.1的数据
return tf.Variable(initial)

#初始化偏置项
def bias_variable(shape):
initial = tf.constant(0.1, shape = shape )
return tf.Variable(initial)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值