TensorFlow学习_NN

 1 # -*- coding=UTF8 -*-
 2 #author = Lee
 3 
 4 import tensorflow as tf
 5 from tensorflow.examples.tutorials.mnist import input_data
 6 
 7 mnist = input_data.read_data_sets('mnist', one_hot=True)
 8 
 9 #输入数据,权重,偏差
10 input_x = tf.placeholder(tf.float32, shape = [None, 28 * 28])
11 y_actual = tf.placeholder(tf.float32, shape = [None, 1 * 10])         #实际值
12 W = tf.Variable(tf.zeros([784, 10]))
13 b = tf.Variable(tf.zeros([10]))
14 
15 #从测试Test数据集中选取3000个手写数字的图片和对应的标签
16 test_x = mnist.test.images[:3000] # 图片
17 test_y = mnist.test.labels[:3000] # 标签
18 
19 
20 y_predict = tf.nn.softmax(tf.matmul(input_x, W) + b)                  #预测值
21 
22 #交叉熵是用来衡量我们的预测用于描述真相的低效性
23 cross_entropy = - tf.reduce_sum(y_actual * tf.log(y_predict))
24 
25 #使用梯度下降算法(GradientDescent)来不断地修改变量以降低成本
26 train_op = tf.train.GradientDescentOptimizer(learning_rate = 0.01).minimize(cross_entropy)
27 
28 init = tf.global_variables_initializer()
29 
30 #检测预测是否真实标签匹配(索引位置一样表示匹配)
31 correc_predic = tf.equal(tf.argmax(y_actual, 1), tf.argmax(y_predict, 1))
32 accuracy = tf.reduce_mean(tf.cast(correc_predic, "float32"))
33 
34 sess = tf.Session()
35 sess.run(init)
36 
37 for i in range(20000):
38     batch = mnist.train.next_batch(50)
39     train_loss, train_op_ = sess.run([cross_entropy, train_op], {input_x: batch[0], y_actual: batch[1]})
40     if i % 100 == 0:
41         accuracy_test = sess.run(accuracy, {input_x: test_x, y_actual: test_y})
42         print('Step:{0} , Accuracy:{1} , Loss:{2}'.format(i, accuracy_test,train_loss))

相对CNN来说NN还是相对简单许多,这里是官网给的流程图

专门去TF社区看了下,专门对softmax有很详细的讲解

softmax可以看成是一个激励(activation)函数或者链接(link)函数,把我们定义的线性函数的输出转换成我们想要的格式,也就是关于10个数字类的概率分布。

因此,给定一张图片,它对于每一个数字的吻合度可以被softmax函数转换成为一个概率值。

猜你喜欢

转载自www.cnblogs.com/AlexHaiY/p/9346385.html