MNIST手写字识别的TensorFlow实现
来源:互联网 发布:linux tail命令 编辑:程序博客网 时间:2024/04/30 21:54
1. 简介
本文介绍的是MNIST手写字体CNN识别模型的TensorFlow的实现。据本人亲自测试,当迭代训练次数为20000时能在验证集上取得最高的准确率。当迭代训练次数达到28000次之后,模型识别准确率骤降,至于原因本人后续研究解释。
2. 完整源码实现
from tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tf# 导入数据集mnist = input_data.read_data_sets("MNIST_data", one_hot=True)sess = tf.InteractiveSession()# 权重和初始化创建函数def weight_variable(shape): 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): return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')def max_pool_2x2(x): return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')# 定义输入的特征x和真实类标y_x = tf.placeholder(tf.float32, [None, 784])y_ = tf.placeholder(tf.float32, [None, 10])x_image = tf.reshape(x, [-1, 28, 28, 1])# 定义第一层卷积层W_conv1 = weight_variable([5, 5, 1, 32])b_conv1 = bias_variable([32])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([7 * 7 * 64, 1024])b_fc1 = bias_variable([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)# Dropout输出连接Softmax层,得到最后的输出概率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)# 定义损失函数,优化器使用Adamcross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv), reduction_indices=[1]))train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)# 评估准确率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))# 初始化所有参数,开始训练tf.global_variables_initializer().run()for i in range(20000): 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}) print("step %d, training accuracy %g" % (i, train_accuracy)) train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})# 测试集上的准确率print("test accuracy %.2f%%" % (100 * accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})))
3. 输出结果
...step 18300, training accuracy 1step 18400, training accuracy 1step 18500, training accuracy 1step 18600, training accuracy 1step 18700, training accuracy 1step 18800, training accuracy 1step 18900, training accuracy 1step 19000, training accuracy 1step 19100, training accuracy 1step 19200, training accuracy 1step 19300, training accuracy 1step 19400, training accuracy 1step 19500, training accuracy 1step 19600, training accuracy 1step 19700, training accuracy 1step 19800, training accuracy 1step 19900, training accuracy 1test accuracy 99.20%
4 0
- MNIST手写字识别的TensorFlow实现
- 基于tensorflow的MNIST手写字识别
- Tensorflow | MNIST手写字识别
- tensorflow mnist数据集手写字识别
- TensorFlow学习笔记(一)MNIST手写字识别
- 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
- 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
- Python神经网络代码识别手写字的实现流程(一):加载mnist数据
- MXNet | 手写字MNIST识别比赛
- 基于Opencv库中SVM模块的MNIST手写字识别数据库识别
- caffe学习例子(一) mnist手写字识别
- Tensorflow框架下识别手写字神经网络代码
- 手写字识别C++
- tensorflow实现softma识别MNIST
- tensorflow实现KNN识别MNIST
- TensorFlow的MNIST数据识别
- TensorFlow DNN 以库函数的方式实现MNIST手写识别
- TensorFlow CNN 以库函数的方式实现MNIST手写识别
- 利用Android源码,轻松实现汉字转拼音功能
- CF
- 自定义手指滑动解锁
- 里氏替换原则(LSP)
- 对象及内存管理——final修饰符
- MNIST手写字识别的TensorFlow实现
- Machine Learning第二讲[多变量线性回归] --(一)多变量线性回归
- 欢迎使用CSDN-markdown编辑器
- 八皇后问题
- 精通Python网络爬虫-书籍介绍
- 将十进制的各个位数分离出来
- Unity编程笔记----多语言切换
- 比特币区块结构解析
- MATLAB深度学习CNN包的代码详解补充及各变量参数说明