marquee
  • 2018上半年将更新数据库、C++、计算机组成原理、操作系统等文章,谢谢关注~
  • 由于算法限制,搜索时注意简化关键字,谢谢支持~
  • 网站不兼容IE5.0及以下,请使用主流浏览器访问.
  • 试用搜索、标签、分类目录功能发现更多。
  • TensorFlow简单卷积神经(CNN)网络实现

    数据集

    本次依然使用MNIST数据集来进行卷积神经网络训练。

    MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:

    之间用简单神经网络进行手写识别的博文:http://www.omegaxyz.com/2018/04/26/tensorflow_mnist_simple/

    简单卷积神经网络的流程

    第一层卷积操作

    需要输入的参数值有卷积核尺寸大小,即patch、图像通道数,卷积核的数目,代表会出现多少个卷积特征图像。

    对于每一个卷积核都有一个对应的偏置量。

    图片乘以卷积核,并加上偏执量,卷积结果28*28*32。

    池化结果14*14*32 卷积结果乘以池化卷积核。

    第二层卷积操作

    32通道卷积,卷积出64个特征。

    原图像尺寸28*28,第一轮图像缩小为14*14,共有32张,第二轮后图像缩小为7*7,共有64张。

    第三层全连接操作

    二维张量,第一个参数7*7*64的patch,也可以认为是只有一行7*7*64个数据的卷积,第二个参数代表卷积个数共1024个。

    卷积操作,结果是1*1*1024,单行乘以单列等于1*1矩阵,matmul实现最基本的矩阵相乘,不同于tf.nn.conv2d的遍历相乘,自动认为是前行向量后列向量。

    第四层输出操作

    二维张量,1*1024矩阵卷积,共10个卷积,对应我们开始的ys长度为10。

    最后的分类,结果为1*1*10 ,Softmax和Sigmoid都是基于logistic分类算法,一个是多分类一个是二分类。

    注意

    dropout操作,减少过拟合,其实就是降低上一层某些输入的权重scale,甚至置为0,升高某些输入的权值,甚至置为2,防止评测曲线出现震荡。

    使用占位符,由dropout自动确定scale,也可以自定义,比如0.5,根据TensorFlow文档可知,程序中真实使用的值为1/0.5=2,也就是某些输入乘以2,同时某些输入乘以0。

    代码

    结果:

    显然这个结果要比简单双层神经网络的效果要好。

    读者评分
    [评分人数: 1 平均分: 5]

    评论

    OmegaXYZ