• 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函数转换成为一个概率值。

  • 相关阅读:
    并发编程学习笔记之Java存储模型(十三)
    并发编程学习笔记之原子变量与非阻塞同步机制(十二)
    并发编程学习笔记之构建自定义的同步工具(十一)
    并发编程学习笔记之显示锁(十)
    并发编程学习笔记之可伸缩性(九)
    并发编程学习笔记之死锁(八)
    并发编程学习笔记之自定义配置线程池(七)
    并发编程学习笔记之取消和关闭(六)
    并发编程学习笔记之线程池(五)
    并发编程学习笔记之并发工具类(四)
  • 原文地址:https://www.cnblogs.com/AlexHaiY/p/9346385.html
Copyright © 2020-2023  润新知