zoukankan      html  css  js  c++  java
  • 莫烦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
            ))

    运行结果

  • 相关阅读:
    SOLID (面向对象设计) 基本原则
    进化计算安排
    Python matplotlib绘图学习笔记
    Python 语法2
    Python 语法1
    C++入门程序作业3
    C++入门程序作业2
    C++入门程序作业1
    SE1-soc入手又有的东西可以玩了
    pointer to function
  • 原文地址:https://www.cnblogs.com/aimoboshu/p/13809829.html
Copyright © 2011-2022 走看看