莫烦tensorflow学习记录 (4)Classification 分类学习

MNIST 数据

首先准备数据(MNIST库)

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

一个谷歌提供的手写数据库,数据中包含55000张训练图片,每张图片的分辨率是28×28,所以我们的训练网络输入应该是28×28=784个像素数据。

搭建网络

from __future__ import print_function
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# number 1 to 10 data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

def add_layer(inputs,in_size,out_size,activation_function=None): #定义添加神经层的函数def add_layer(),它有四个参数:输入值、输入的大小、输出的大小和激励函数,我们设定默认的激励函数是None。
    Weights = tf.Variable(tf.random_normal([in_size,out_size]))
    biases = tf.Variable(tf.zeros([1,out_size])+ 0.1)  #机器学习中推荐biases不为0,所以加个0.1
    #定义Wx_plus_b, 即神经网络未激活的值。其中,tf.matmul()是矩阵的乘法。
    Wx_plus_b = tf.matmul(inputs, Weights) + biases
    #当activation_function——激励函数为None时,输出就是当前的预测值——Wx_plus_b,不为None时,就把Wx_plus_b传到activation_function()函数中得到输出。
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

# 计算精度函数,利用测试集来测试
def compute_accuracy(v_xs,v_ys):
    global prediction  # 将输出定义为全局变量
    y_pre = sess.run(prediction, feed_dict={xs: v_xs}) # v_xs 进入到preduction里面计算y的预测值
    correct_prediction = tf.equal(tf.argmax(y_pre, 1), tf.argmax(v_ys, 1)) # 预测值与测试集的y值对比
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 统计对比结果
    result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys})
    return result



# 为网络输入定义占位符
xs = tf.placeholder(tf.float32, [None, 784]) # 28x28,图片有784个像素点
ys = tf.placeholder(tf.float32, [None, 10]) # 每张图片都表示一个数字,所以我们的输出是数字0到9,共10类。

# 神经网络
l1 = add_layer(xs,784,150,activation_function=tf.nn.tanh)
prediction = add_layer(l1,150,10,activation_function=tf.nn.softmax)

# 损失函数,预测与实际数据之间的误差
# loss函数(即最优化目标函数)选用交叉熵函数。交叉熵用来衡量预测值和真实值的相似程度,
# 如果完全相同,它们的交叉熵等于零。
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),
                                              reduction_indices=[1]))   #loss

# 训练步骤
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) #

# 初始化变量
init = tf.global_variables_initializer()

# 上面所有的都还没有运行
sess = tf.Session()
sess.run(init) # 这里运行了init

for i in range(1000):
    batch_xs,batch_ys = mnist.train.next_batch(100) #现在开始train,每次只取100张图片,免得数据太多训练太慢。
    sess.run(train_step,feed_dict={xs:batch_xs,ys:batch_ys})
    if i%50==0:
        print(compute_accuracy(
            mnist.test.images,mnist.test.labels
        ))

运行结果

 

posted @ 2020-10-13 16:52  薄书  阅读(153)  评论(0编辑  收藏  举报