from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)# 权重初始化
def weight_variable(shape):# 从截断的正态分布中输出随机值。 # 生成的值服从具有指定平均值和标准偏差的正态分布,如果生成的值大于平均值2个标准偏差的值则丢弃重新选择。initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)# 偏置初始化
def bias_variable(shape):    initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)# 卷积和池化
def conv2d(x, W):# x: 指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape# W: 相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数]# strides: 卷积时在图像每一维的步长,这是一个一维的向量,长度4# padding: string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='VALID')# mp2*2池化
def max_pool_2x2(x):# x: 需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape# ksize: 池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1# strides: 和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]# padding: 和卷积类似,可以取'VALID' 或者'SAME'return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='VALID')import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder("float", [None,10])# 第一层卷积
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
x_image = tf.reshape(x, [-1,28,28,1])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)# 第二层卷积
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)# 密集连接层
W_fc1 = weight_variable([4 * 4 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 4*4*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)# DropOut
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)# 输出层
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# 训练和评估模型
cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
# Adam 优化器根据损失函数对每个参数的梯度的一阶矩估计和二阶矩估计动态调整针对于每个参数的学习速率。Adam 也是基于梯度下降的方法,但是每次迭代参数的学习步长都有一个确定的范围,不会因为很大的梯度导致很大的学习步长,参数的值比较稳定。 详细的话:http://www.cnblogs.com/xinchrome/p/4964930.html
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
sess.run(tf.global_variables_initializer())
with sess.as_default():for i in range(1000):batch = mnist.train.next_batch(50)if i%100 == 0:train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}, session=sess)print("step {}, training accuracy {}".format(i, train_accuracy))train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})print("test accuracy {}".format(accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}, session=sess)))

个人理解:

输入图片大小为28*28 单通道

5*5*1*32  5*5卷积核,单通道,32个卷积核

经过第一层卷积层后,输出大小为  28-5+1=24   24*24*32

池化层移动窗口为 1*2*2*1  行列stride均为2

经过第一层池化后,输出大小为   24/2 =12      12*12*32

第二层卷积核  5*5*32*64  卷积窗口仍是5*5 通道为32  64个卷积核

经过第二层卷积后 输出大小为12-5+1=8   8*8*64

经过第二层池化(参数同第一层) , 输出大小为4*4*64

最后全连接层:将池化输出平铺成一维的向量reshape[-1,4*4*64]   即1*1024的维度;

cnn_mnist_案例详解相关推荐

  1. python代码案例详解-我用Python抓取了7000 多本电子书案例详解

    安装 安装很简单,只要执行: pip install requests-html 就可以了. 分析页面结构 通过浏览器审查元素可以发现这个电子书网站是用 WordPress 搭建的,首页列表元素很简单 ...

  2. python代码案例详解-第7.20节 案例详解:Python抽象类之真实子类

    第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义了图形 ...

  3. java同步方法完成案例_Java同步代码块和同步方法原理与应用案例详解

    本文实例讲述了java同步代码块和同步方法.分享给大家供大家参考,具体如下: 一 点睛 所谓原子性WOmoad:一段代码要么执行,要么不执行,不存在执行一部分被中断的情况.言外之意是这段代码就像原子一 ...

  4. 《微信小程序:开发入门及案例详解》—— 3.4 小结

    本节书摘来自华章出版社<微信小程序:开发入门及案例详解>一 书中的第3章,第3.4节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.4 小 ...

  5. 代码检查规则:Python语言案例详解

    在之前的文章中代码检查规则:Java语言案例详解学习了Java的检查规则.我们今天将学习<代码检查规则:Python语言案例详解>,内容主要分为两个部分:Python的代码检查规则和Pyt ...

  6. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  7. python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

  8. Ajax基本案例详解之load的实现

    Ajax的load实现: 看这篇之前建议大家去看看前面两篇文章: 1.Ajax基本案例详解之$.ajax的实现 2.Ajax基本案例详解之$.get的实现 现在写一下$.load()里面的主要内容: ...

  9. Ajax基本案例详解之$.getjson的实现

    Ajax的$.gethson实现: 看这篇之前建议大家去看看前面两篇文章: 1.Ajax基本案例详解之$.ajax的实现 2.Ajax基本案例详解之$.get的实现 现在写一下$.getjson里面的 ...

最新文章

  1. 126篇殿堂级深度学习论文分类整理 从入门到应用(上)
  2. 第二部分面向对像基础第五章
  3. 计算机课程设计课程计划书,计算机汇编语言课程设计计划书.doc
  4. day32—CSS多列布局学习
  5. 60-320-040-使用-去重-HyperLogLog 去重计数
  6. OPPO以技术推动产品 获专利数首次挺近前十
  7. js parsefloat 相加_JS高程小记-基本概念
  8. 为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项......
  9. GetWindowRect,GetClientRect,ScreenToClient MoveWindow SetWindowPos 用法说明
  10. FPGA—蜂鸣器播放《两只老虎》
  11. 无涯教程: Laravel 8 - 队列介绍
  12. python 第一行包含一个整数n、表示行数_输入 第一行输入一个整数n(1 = n = 100)表示测试样例个数 接下来n行,一...
  13. AI测试】人工智能测试整体介绍——第五部分
  14. FCRP-D---帆软官网模拟题,报表模块
  15. 同样是研究生,读2年和3年有什么区别?
  16. mysql级别_mysql事务级别
  17. 789 逃脱阻碍者
  18. Java之滑动窗口详解
  19. CSDN、博客园、简书、思否、掘金,程序员最佳中文论坛我该怎么选
  20. 华为机试2022.4.13:分发糖果

热门文章

  1. python 的filter()函数
  2. python中的set函数、列表的操作
  3. windows和ubuntu虚拟机之间不能自由复制粘贴东西(要安装VMware Tools)vmware-install.pl
  4. 【放置奇兵】英雄各属性介绍
  5. D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)
  6. python3 字符串前字母(无前缀,前缀u,前缀b,前缀r)含义
  7. CSSbackground的详细使用
  8. 驾驶卡丁车 模拟,迷宫(女赛)
  9. 期末离散数学复习稳过不挂指南(更新中)
  10. thymeleaf基本语法