MNIST 数字识别和数据持久化–step by step 入门TensorFlow(三)
标签:tensorflow
我们将采用Jupyter notebook交互式编程的方式,通过一步步代码的讲解,学习Tensorflow 编程。推荐使用Jupyter notebook作为开发环境按照文中的代码step by step 的学习。
文章列表:
Tensorflow基础知识与神经网络构建–step by step 入门TensorFlow(一)
深层神经网络实现–step by step 入门TensorFlow(二)
MNIST 数字识别和数据持久化–step by step 入门TensorFlow(三)
一个完整的MNIST 数字识别代码
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# 数据集参数
input_dim = 784
output_dim = 104
# 神经网络参数
h1_dim = 500
batch_size = 100
learning_rate_base = 0.8
learning_rate_decay = 0.99 # 学习率的衰减率
regularization_rate = 0.0001 # 正则化项系数
training_step = 30000
moving_average_decay = 0.99 # 滑动平均衰减率
def net(input_tensor, avg_class, w1,b1,w2,b2):
# 不使用滑动平均类
if avg_class == None:
h1 = tf.nn.relu(tf.matmul(input_tensor, w1) + b1)
output = tf.matmul(h1, w2) + b2
return output
# 使用滑动平均类
else:
h1 = tf.nn.relu(tf.matmul(input_tensor, avg_class.average(w1) + avg_class.average(b1)))
return tf.matmul(h1,avg_class.average(w2) + avg_class.average(b2))
def train(mnist):
x = tf.placeholder(tf.float32, shape=[None,784], name="x_input")
y_ = tf.placeholder(tf.float32, shape=[None, 10], name="y_input")
w1 = tf.Variable(tf.truncated_normal([input_dim, h1_dim], stddev=0.1))
b1 = tf.Variable(tf.constant(0.1, shape=[h1_dim]))
w2 = tf.Variable(tf.truncated_normal([h1_dim, output_dim], stddev=0.1))
b2 = tf.Variable(tf.constant(0.1, shape=[output_dim]))
y = net(x, None, w1, b1, w2, b2)
# 使用滑动平均
global_step = tf.Variable(0, trainable=False)
variable_averages = tf.train.ExponentialMovingAverage(moving_average_decay,global_step)
variable_averages_op = variable_averages.apply(tf.trainable_variables())
average_y = net(x, variable_averages, w1, b1, w2, b2)
# argmax(y_, 1) 提取第1维度最大的,即为1的那个,即把10个数的向量变为1个数的答案
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
cross_entropy_mean = tf.reduce_mean(cross_entropy)
# 计算L2正则化损失函数
regularizer = tf.contrib.layers.l2_regularizer(regularization_rate)
regularizati