# -*- coding: utf-8 -*-
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# 用于设置将记录哪些消息的阈值
old_v = tf.logging.get_verbosity()
# 设置日志反馈模式
tf.logging.set_verbosity(tf.logging.ERROR)
# 载入数据集
mnist = input_data.read_data_sets('/文件路径/MNIST_data', one_hot=True)
# 设置batch大小
batch_size = 100
n_batch = mnist.train.num_examples // batch_size
# 定义两个placeholder
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
# 神经元保留率
keep_prob = tf.placeholder(tf.float32)
# 学习率
LR = tf.Variable(0.001, dtype=tf.float32)
# 神经网络1
W1 = tf.Variable(tf.truncated_normal([784, 600], stddev=0.1))
b1 = tf.Variable(tf.zeros([600]) + 0.1)
L1 = tf.nn.tanh(tf.matmul(x, W1) + b1)
L1_drop = tf.nn.dropout(L1, keep_prob)
# 神经网络2
W2 = tf.Variable(tf.truncated_normal([600, 300], stddev=0.1))
b2 = tf.Variable(tf.zeros([300]) + 0.1)
L2 = tf.nn.tanh(tf.matmul(L1_drop, W2) + b2)
L2_drop = tf.nn.dropout(L2, keep_prob)
W3 = tf.Variable(tf.truncated_normal([300, 10], stddev=0.1))
b3 = tf.Variable(tf.zeros([10]) + 0.1)
# softmax预测分类
prediction = tf.nn.softmax(tf.matmul(L2_drop, W3) + b3)
# 交叉商
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y, logits=prediction))
# AdamOptimizer()优化器
train_step = tf.train.AdamOptimizer(LR).minimize(loss)
# 初始化变量
init_op = tf.global_variables_initializer()
# 这里是返回一个储存布尔类型的矩阵,
# tf.equal,对比两个矩阵(向量)相相等的元素,
# tf.argmax返回最大值索引(对应的数字)
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))
# 求准确率:tf.cast转化数据格式, tf.reduce_mean求平均
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
with tf.Session() as sess:
sess.run(init_op)
for epoch in range(31):
sess.run(tf.assign(LR, 0.001*(0.9**epoch)))
for batch in range(n_batch):
# 分批次训练,next_batch记录上一个结尾,进行下一个开始
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
sess.run(train_step, feed_dict={x: batch_xs, y: batch_ys, keep_prob: 0.9})
learning_rate = sess.run(LR)
# 准确率
acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels, keep_prob: 1})
# 打印准确率和学习率
print("Iter" + str(epoch) + ",Testing Accuracy=" + str(acc) +
" Learning Rate=" + str(learning_rate))
# 参考文档:https://www.w3cschool.cn/tensorflow_python
TensorFlow -MNIST识别-1
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1 手写字体MNIST数据集介绍 当我们开始学习编程的时候,第一件事往往是学习打印“Hello World”,机器...
- 整体流程:1.定义算法公式2.定义loss 选定优化器,并制定优化器优化loss3.迭代数据进行训练4.在测试集或...
- -- 环境:win10, jupyter notebook/pycharm, python3.x, tenso...
- 这是我Deep_in_mnist系列的第三篇博客 注意:这里的代码都是在Jupyter Notebook中运行,原...
- 这是我Deep_in_mnist系列的第二篇博客 注意:这里的代码都是在Jupyter Notebook中运行,原...