从时间上来说,这篇文章写的完了,因为这个实验早就做完了;但从能力上来说,这篇文章出现的早了,因为很多地方我都还没有理解。如果不现在写,不知道什么时候会有时间是其一,另外一个原因是怕自己过段时间忘记。

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 # @Author  : mario
 5 # @File    : mnist_faltung.py
 6 # @Project : base
 7 # @Time    : 2018-12-19 14:11:38
 8 # @Desc    : File is ...
 9
10 import tensorflow as tf
11 from tensorflow.examples.tutorials.mnist import input_data
12
13 mnist = input_data.read_data_sets("data/", one_hot=True)
14
15
16 def init_weight_variable(shape):
17     initial = tf.truncated_normal(shape, stddev=0.1)
18     return tf.Variable(initial)
19
20
21 def init_bias_variable(shape):
22     initial = tf.constant(0.1, shape=shape)
23     return tf.Variable(initial)
24
25
26 def conv2d(x, W):
27     return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding="SAME")
28
29
30 def max_pool_2x2(x):
31     return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")
32
33
34 x = tf.placeholder(tf.float32, [None, 784])
35 y_ = tf.placeholder(tf.float32, [None, 10])
36
37 W_conv_1 = init_weight_variable([5, 5, 1, 32])
38 b_conv_1 = init_bias_variable([32])
39
40 x_image = tf.reshape(x, [-1, 28, 28, 1])
41
42 h_conv_1 = tf.nn.relu(conv2d(x_image, W_conv_1) + b_conv_1)
43 h_pool_1 = max_pool_2x2(h_conv_1)
44
45 W_conv_2 = init_weight_variable([5, 5, 32, 64])
46 b_conv_2 = init_bias_variable([64])
47
48 h_conv_2 = tf.nn.relu(conv2d(h_pool_1, W_conv_2) + b_conv_2)
49 h_pool_2 = max_pool_2x2(h_conv_2)
50
51 W_fc_1 = init_weight_variable([7 * 7 * 64, 1024])
52 b_fc_1 = init_bias_variable([1024])
53
54 h_pool_flat = tf.reshape(h_pool_2, [-1, 7 * 7 * 64])
55 h_fc_1 = tf.nn.relu(tf.matmul(h_pool_flat, W_fc_1) + b_fc_1)
56
57 keep_prob = tf.placeholder(tf.float32)
58 h_fc1_drop = tf.nn.dropout(h_fc_1, keep_prob)
59
60 W_fc_2 = init_weight_variable([1024, 10])
61 b_fc_2 = init_bias_variable([10])
62
63 y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc_2) + b_fc_2)
64
65 cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))
66 train_step = tf.train.AdagradOptimizer(1e-4).minimize(cross_entropy)
67
68 sess = tf.InteractiveSession()
69 init = tf.global_variables_initializer()
70 sess.run(init)
71
72 for _ in range(20000):
73     batch = mnist.train.next_batch(50)
74     train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
75
76 correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
77 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
78
79 print(accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))

python版本:Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31) ;tensor flow版本:1.12.0

10、11行:导入必要模块

13行:加载本地的数据

16~18行:定义初始化权重变量函数

21~23行:定义初始化偏置变量函数

26~27行:定义一个步长为1,边距为0的2x2的卷积函数

30~31行:定义一个2x2的池化函数

34、35行:定义占位符x和y_,其中x是为了接收原始数据,y_是为了接受原始数据标签

37、38行:初始化第一层卷积权重和偏置量

40行:重塑原始数据结构,我们要把[n,784]这样的数据结构转换成卷积需要的[n,28,28,1],这里的n是指数据量,原始数据是将28x28像素的图片展开为784,卷积相当于我们先将数据还原为28x28,最后的1是指通道数

42、43行:进行卷积操作,并将卷积结果池化

45~49行:进行第二次卷积操作,同样也是将卷积结果池化

51~61行:使用ReLU,其中57行和58行是为了防止过拟合

63行:使用softmax算法确定其分类

65行:计算交叉熵

66行:利用交叉熵,调用AdagradOptimizer算法,训练模型

68~70行:启用session,初始化变量

72~74行:每次50个训练20000次

76~79行:评估模型识别率

也是遇到了很多的问题,但几乎都是因为不理解代码造成的,虽然现在代码是改对了,但是不理解的地方还是有很多,而且很多概念也是不理解,并且不知道实际上是做了什么操作,比如说卷积、池化等,倒是做了什么?感觉这个还是需要后续了解的。“路漫漫其修远兮,吾将上下而求索”用在这里再合适不过了。

转载于:https://www.cnblogs.com/ben-mario/p/10180978.html

记录MNIST采用卷积方式实现与理解相关推荐

  1. 使用51单片机采用中断方式进行串口通信的学习记录:

    使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...

  2. Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限

    目录 1. 需要在spring-security.xml中配置验证过滤器,来取代spring-security.xml的默认过滤器 2. 配置securityMetadataSource,可以通过ur ...

  3. 卷积神经网络中不同类型的卷积方式介绍

    之前在文章<<模型汇总_1>牛逼的深度卷积神经网络CNN>详细介绍了卷积神经网络的基本原理,以及常见的基本模型,如LeNet,VGGNet,AlexNet,ReseNet,In ...

  4. 卷积神经网络的深入理解-基础篇(卷积,激活,池化,误差反传)

    卷积神经网络的深入理解-基础篇 一.卷积(convolution) 1.无padding时 2.有padding时 3.卷积与全连接 通道数(一般一张彩色图像为三通道RGB) 二.激活(激活函数)(持 ...

  5. 图卷积网络(GCN)简单理解

    1. 预备知识 1.1 图网络的种类.区别和联系 Graph Embedding Graph Embedding指图嵌入,属于表示学习的范畴,也可以称为网络嵌入.图表示学习.网络表示学习等等. 具体可 ...

  6. yolov4项目记录7-Darknet模型构造方式

    目录 一.概述 二.构造方式 1.配置文件 2.层的解析 ①卷积层 ②route层 ③shortcut层 ④upsample层 3.forward部分 ①流程 ②route部分 ③shortcut部分 ...

  7. python采用解释方式执行_Python初学(一)

    <本系列性文章是根据一篇python教程来写的,如有侵权请联系管理员删除文章> 在学习Python之前要先知道什么是程序设计语言,也就是程序设计语言的概述是什么? 程序设计语言的概述: 程 ...

  8. wireshark的使用教程--用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的

     wireshark的使用教程 --用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的 wireshark是一款抓包软件,比较易用,在平常可以利用它抓包,分析协议或者监控网络,是一个比较好的 ...

  9. 和卷积的区别_[CVPR2019]:最新高效卷积方式HetConv

    最近放出来了一篇CVPR2019论文,文章提出了一种新的高效卷积方式:HetConv,在CIFAR10.ImageNet等数据集超过了标准卷积以及DW+PW的高效卷积组合形式,取得了更高的分类性能. ...

最新文章

  1. ping: sendto: Network is unreachable
  2. linux中录屏工具byzanz
  3. python多线程扫描_python实现多线程扫描网站目录
  4. Understanding JVM Internals---不得不转载呀
  5. zcmu1157: 新年彩灯Ⅱ(二维树状数组)
  6. CG CTF RE Hello,RE!
  7. WordPress响应式Alt_Blog主题 简约博客主题
  8. wait(3) - Linux man page
  9. 最小二乘法拟合多项式原理以及c++实现
  10. python 编写一个银行卡类,具有账号,人名与余额属性。编写提款机类,接收一张银行卡,并且具有存款,提款,查询余额,转账功能
  11. 大家推荐的入门心理学书籍
  12. 因为制作爬虫程序,我收到了警告
  13. flashfxp怎么传文件,小编教你flashfxp怎么传文件
  14. 语音机器人空号识别介绍
  15. hdu 2881 Jack's struggle(DP)
  16. python中turtle画小草_python 笔记 之带参数的装饰器
  17. 利用python中basemap库绘制地图
  18. CC00027.elasticsearch——|HadoopElasticSearch.V27|——|ELK.v27|集群|QueryDSL|高亮|
  19. Swift 属性与方法
  20. 【太虚AR_v0.1】使用教程 | SLAM(Markerless)

热门文章

  1. mysql更新一个表里的字段等于另一个表某字段的值
  2. SimpleAdapter真不简单!
  3. django开发Blog(1)
  4. 1244. Gentlemen
  5. 第一篇随笔,通常都是内容空洞的。
  6. 【Caffe实践】 添加自己的网络层
  7. 关于html的a标签的target=__blank 的安全漏洞问题
  8. Docker学习笔记【一】
  9. 【命令init3/5】centos7切换图像界面和dos界面
  10. Exchange邮件服务器实现外部邮件的收发