import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

# 在变量的构建时,通过truncated_normal 函数初始化权重变量,shape 是一个二维的tensor,从截断的正太分布中输出随机值。
def weight_varible(shape):
initial=tf.truncated_normal(shape,stddev=0.1)
return tf.Variable(initial) def bias_varible(shape):
initial=tf.constant(0.1,shape=shape)
return tf.Variable(initial) def conv2d(x,w):
# x 输入,是一个tensor,w 为filter,strides卷积时每一维的步长,padding 参数是string类型的值,为same,或valid,use_cudnn_on_gpu: bool类型,默认是true
return tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')
def max_pool_2x2(x):
# x 为池化的输入,ksize 为窗口的大小,四维向量,一般为【1,height,width,1】, 因为不在channel上做池化,stride 和卷积类型,窗口在每一维上滑动的步长,【1,stride,stride,1】
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME') # tensorflow 中已经写好了加载mnist 数据集的脚本,minist是一个轻量级的类文件,存储了Numpy格式的训练集,验证集。。同时提供了数据中mini-batch迭代的功能
mnist=input_data.read_data_sets('MNIST_data/',one_hot=True) # 输入数据参数
x=tf.placeholder(tf.float32,[None,784])
# 当某轴为-1 时,根据数组元素的个数自动计算此轴的长度
x_image=tf.reshape(x,[-1,28,28,1])
y=tf.placeholder(tf.float32,[None,10]) # 后台C++,通过session与后台连接, 在session中运行创建的图,
# 使用InteractiveSession 更方便,允许交互操作,如果不用InteractiveSession, 在启动一个回话和运行图之前,要创建整个流图
sess=tf.InteractiveSession() # 第一个卷积层
w_conv1=weight_varible([5,5,1,32])
b_conv1=bias_varible([32])
h_conv1=tf.nn.relu(conv2d(x_image,w_conv1)+b_conv1)
h_pool1=max_pool_2x2(h_conv1) # 第二个卷积层
w_conv2=weight_varible([5,5,32,64])
b_conv2=bias_varible([64])
h_conv2=tf.nn.relu(conv2d(h_pool1,w_conv2)+b_conv2)
h_pool2=max_pool_2x2(h_conv2) #全连接层
# 经过两次pool 之后大小变为7*7
w_fc1=weight_varible([7*7*64,1024])
b_fc1=bias_varible([1024]) h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64]);
h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,w_fc1)+b_fc1) # dropout 层
keep_prob=tf.placeholder(tf.float32)
h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob) #output softmax w_fc2=weight_varible([1024,10])
b_fc2=bias_varible([10])
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop,w_fc2)+b_fc2) # 定义loss 函数,和最优化函数
cross_entropy=-tf.reduce_sum(y*tf.log(y_conv))
train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) # 定义eval
correct_prediction=tf.equal(tf.arg_max(y_conv,1),tf.arg_max(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))# cast 为类型转换函数,将类型转换为tf.float32 sess.run(tf.initialize_all_variables()) # 开始正式的训练
for i in range(20000):
batch=mnist.train.next_batch(50)
# mnist 类中提供了取batch的函数
if i%100==0: # train_accuracy=accuracy.eval()
print("step %d, training accuracy %g" %(i, sess.run(accuracy,feed_dict={x:batch[0],y:batch[1],keep_prob:1.0}))) sess.run(train_step,feed_dict={x:batch[0],y:batch[1],keep_prob:0.5})
#train_step.run() print("test accuracy %g" %(accuracy.eval(feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})))

  

sess.run(accuracy,feed_dict={x:batch[0],y:batch[1],keep_prob:1.0})

accuracy.eval(feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})

accuracy.eval 相当于 tf.get_default_session().run(t)

accuracy.eval()==sess.run(t)

而sess.run() 可以在同一步骤获取更多的张量的值,: sess.run(accuracy, train_step)

sess.run 和eval 每次都从头执行graph, 要缓存计算结果,需要分配tf.Variable

注意注意: 我们 需要关闭回话
sess.close()
如果想不显式的调用close, 可以用with 代码块
with tf.Session() as sess:
...

  如果需要存储参数:

saver=tf.train.Saver()
save_path=saver.save(sess,model_path)
load_path=saver.restore(sess,model_path)

  

												

tensorflow实现mnist的更多相关文章

  1. Android+TensorFlow+CNN+MNIST 手写数字识别实现

    Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...

  2. Ubuntu16.04安装TensorFlow及Mnist训练

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com TensorFlow是Google开发的开源的深度学习框架,也是当前使用最广泛的深度学习框架. 一.安 ...

  3. 一个简单的TensorFlow可视化MNIST数据集识别程序

    下面是TensorFlow可视化MNIST数据集识别程序,可视化内容是,TensorFlow计算图,表(loss, 直方图, 标准差(stddev)) # -*- coding: utf-8 -*- ...

  4. 基于tensorflow的MNIST手写数字识别(二)--入门篇

    http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...

  5. 使用Tensorflow操作MNIST数据

    MNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门样例.而TensorFlow的封装让使用MNIST数据集变得更加方便.MNIST数据集是NIST数据集的 ...

  6. TensorFlow RNN MNIST字符识别演示快速了解TF RNN核心框架

    TensorFlow RNN MNIST字符识别演示快速了解TF RNN核心框架 http://blog.sina.com.cn/s/blog_4b0020f30102wv4l.html

  7. 2、TensorFlow训练MNIST

    装载自:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html TensorFlow训练MNIST 这个教程的目标读者是对机器学习和T ...

  8. 深入浅出TensorFlow(二):TensorFlow解决MNIST问题入门

    2017年2月16日,Google正式对外发布Google TensorFlow 1.0版本,并保证本次的发布版本API接口完全满足生产环境稳定性要求.这是TensorFlow的一个重要里程碑,标志着 ...

  9. Tensorflow之MNIST的最佳实践思路总结

    Tensorflow之MNIST的最佳实践思路总结   在上两篇文章中已经总结出了深层神经网络常用方法和Tensorflow的最佳实践所需要的知识点,如果对这些基础不熟悉,可以返回去看一下.在< ...

  10. TensorFlow训练MNIST报错ResourceExhaustedError

    title: TensorFlow训练MNIST报错ResourceExhaustedError date: 2018-04-01 12:35:44 categories: deep learning ...

随机推荐

  1. 微信内置浏览器在使用video标签时(安卓)默认全屏的原因及解决办法

    根据X5论坛得到的答案是:设计如此. 腾讯真是越来越嚣张了,一家独大后用户体验都不注重了(不给程序员留活路). 听说有个申请加入vdeo白名单的,域名验证后就可以解决默认全屏(反正我是没见过申请入口, ...

  2. Jenkins之常用变量

    BUILD_NUMBER 目前的编号,如“153” JOB_NAME 此构建项目的名称,如“foo”或“foo / bar”. JOB_BASE_NAME 此建立项目的名称将剥离文件夹路径,例如“ba ...

  3. 洛谷P2257 YY的GCD

    今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...

  4. 【POI每日题解 #6】KRA-The Disks

    题目链接 : [POI2006]KRA-The Disks 好有既视感啊... 注意一下输入输出 输入是从上到下输入箱子的宽度 输出是最上面的积木停在哪一层 即 箱子高度 - 积木高度 + 1 在初始 ...

  5. Spring事务说明与自实现

    要使用Springboot的事务其实非常简单,在启动类上添加@EnableTransactionManagement,在Service的类或者方法上使用@Transactional就可以了. 事务本身 ...

  6. 22 Zabbix系统版本升级过程

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 22 Zabbix系统版本升级过程 Zabbix升级与其他相类似系统升级一样,前提一定做好备份,备 ...

  7. NinePatch图片

    绍 参考 :http://blog.sina.com.cn/s/blog_5033827f0100r4dm.html NinePatch图片以*.9.png结尾,和普通图片的区别是四周多了一个边框(如 ...

  8. CMS系统关键技术点总结(UrlRewrite、批量静态化、发送邮件)

    1.UrlRewrite protected void Application_BeginRequest(object sender, EventArgs e) { //将请求的ShowArticle ...

  9. NCBI上查看SNP位点在哪个基因座上(locus)

    首先,进入NCBI的主页网站:https://www.ncbi.nlm.nih.gov/variation/view/ 进入后,在下图红色框框位置输入目的SNP,比如rs608139 输完后,出现如下 ...

  10. PHP依赖倒置和控制反转

    判断代码的好坏,我们有自己的标准:高内聚,低耦合.为了解决这一问题,php中有许多优秀的设计模式,比如工厂模式,单例模式. 而在代码中体现出来的设计模式,就如依赖注入和控制反转. 那什么是依赖注入? ...