TensorFlow笔记(二):多层CNN代码详细介绍



在之前的TensorFlow笔记(一):流程,概念和简单代码注释 文章中,已经大概解释了tensorflow的大概运行流程,并且提供了一个mnist数据集分类器的简单实现。当然,因为结构简单,最后的准确率在91%左右。似乎已经不低了?其实这个成绩是非常不理想的。现在mnist的准确率天梯榜已经被刷到了99.5%以上。为了进一步提高准确率,官网还提供了一个多层的CNN分类器的代码。相比之前的一层神经网络,这份代码的主要看点倒不是多层,而是CNN,也就是卷积神经网络。

CNN的具体内容不再详述,概述可以参考这里,详细信息可以参见Convolutional Networks。一般来说,CNN网络的前几层为卷积层和采样层(或者说池化层),在若干层卷积和池化以后,还有若干层全连接层(也就是传统神经网络),最后输出分类信息。大概的结构示意图如下图所示

此处输入图片的描述

可以看到,CNN相比与传统神经网络,最大的区别就是引入了卷积层和池化层。这也是我们在代码中要着重看的地方。
在下面的代码中,卷积是使用tf.nn.conv2d, 池化使用tf.nn.max_pool,下面来详细的讲解一下这两个函数的用法。


tf.nn.conv2d

这个函数的功能是:给定4维的input和filter,计算出一个2维的卷积结果。函数的定义为:

def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,
           data_format=None, name=None):
  
  
  
  • 1
  • 2
  • 1
  • 2

前几个参数分别是input, filter, strides, padding, use_cudnn_on_gpu, …下面来一一解释
input:待卷积的数据。格式要求为一个张量,[batch, in_height, in_width, in_channels].
分别表示 批次数,图像高度,宽度,输入通道数。
filter: 卷积核。格式要求为[filter_height, filter_width, in_channels, out_channels].
分别表示 卷积核的高度,宽度,输入通道数,输出通道数。
strides :一个长为4的list. 表示每次卷积以后卷积窗口在input中滑动的距离
padding :有SAME和VALID两种选项,表示是否要保留图像边上那一圈不完全卷积的部分。如果是SAME,则保留
use_cudnn_on_gpu :是否使用cudnn加速。默认是True


tf.nn.max_pool
进行最大值池化操作,而avg_pool 则进行平均值池化操作.函数的定义为:

def max_pool(value, ksize, strides, padding, data_format="NHWC", name=None):
  
  
  
  • 1
  • 1

value: 一个4D张量,格式为[batch, height, width, channels],与conv2d中input格式一样
ksize: 长为4的list,表示池化窗口的尺寸
strides: 池化窗口的滑动值,与conv2d中的一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值