搭建神经网络基本流程
- 训练的数据
- 定义节点准备接收数据
- 定义神经层:隐藏层和预测层
- 定义 loss 表达式
- 选择 optimizer 使 loss 达到最小
- 然后对所有变量进行初始化,通过 sess.run optimizer,迭代 1000 次进行学习
全局代码
1 | # -*- coding: utf-8 -*- |
运行结果:
模型精确度: 0.1289
模型精确度: 0.8357
模型精确度: 0.8917
模型精确度: 0.9037
模型精确度: 0.8971
模型精确度: 0.9097
模型精确度: 0.9143
模型精确度: 0.9049
模型精确度: 0.9054
模型精确度: 0.9117
模型精确度: 0.9087
模型精确度: 0.9022
模型精确度: 0.9161
模型精确度: 0.915
模型精确度: 0.9164
模型精确度: 0.9048
模型精确度: 0.9174
模型精确度: 0.9131
模型精确度: 0.9047
模型精确度: 0.9149
模型保存路径: /home/pzs741/PycharmProjects/tensorflow-minist-master/mnist/data/regression_model
主要步骤解释
-
导包及数据
from mnist import input_data
from mnist import modeldata = input_data.read_data_sets("MNIST_DATA", one_hot=True) import tensorflow as tf
-
定义线性模型
with tf.variable_scope(“regression”):
x = tf.placeholder(tf.float32, [None, 784])
y, variables = model.regression(x) -
定义交叉熵和预测值
y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
- 然后对所有变量进行初始化,通过 sess.run optimizer,迭代 1000 次进行学习
# important step 对所有变量进行初始化
init = tf.initialize_all_variables()
sess = tf.Session()
# 上面定义的都没有运算,直到 sess.run 才会开始运算
sess.run(init)
# 迭代 1000 次学习,sess.run optimizer
for i in range(1000):
batch_xs, batch_ys = data.train.next_batch(100)
# training train_step 和 loss 都是由 placeholder 定义的运算,所以这里要用 feed 传入参数
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
if i % 50 == 0:
# to see the step improvement
print((sess.run(accuracy, feed_dict={x: data.test.images, y_: data.test.labels})))