• Tensorflow学习三


    昨天刚刚把MNIST的代码在电脑上运行,还没有仔细看代码的含义,今天就跟着中文官网一起继续。


    MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片,也包含每一张图片对应的标签,告诉我们这张图片是数字几。

    MNIST数据集

    首先我们可以通过python的源代码用于自动下载和安装这个数据集。

    import input_data
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

    下载下来的数据集被分成两部分:60000行的训练数据集( mnist.train )和10000行的测试数据集( mnist.test )。

    每一个MNIST数据单元都有两部分组成:一张包含手写数组的图片和一个对应的标签。我们把这些图片设为"xs",把这些标签设为”ys"。寻训练数据集和测试数据集都包含xs和ys,比如训练数据集的图片是mnist.train.images ,训练数据集的标签是mnist.train.labels。

    每一张图片包含28像素X28像素。我们可以用一个数字数组来表示这张图片:
    我们把这个数组展开成一个向量,长度是28x28 = 784。,在MNIST训练数据集中,mnist.train.imags是一个形状为[60000,784]的张量,第一个维度数字用来索引图片,第二个纬度数字用来索引每张图片中的像素点。因此张量里的每一张元素,都表示某张图片里的某个像素的强度值,值介于0和1之间。

    相对应的MNIST数据集的标签是介于0到9的数字,用来描述给定图片里表示的数字,为了用于这个教程,我们使标签数据是“one-hot vectors"。一个one-hot向量除了是某一一位的数字似乎1以外其余各维度数组都是0.所以在此教程总,数字n将表示成一个只有在第维度(从0开始)数字为1的10维向量。比如,标签0将表示成([1,0,0,0,0,0,0,0,0,0])。因此,mnist.train.labels是一个[60000,10]的数字矩阵。

    softmax回归

    我们使用softmax回归其实就是来给不同的对象分配概率。

    softmax回归分为两步:

    第一步:

    为了得到一张给定图片属于某个特定数字类的证据,我们对图片像素值进行加权求和。如果这个像素有很轻的证据说明这张图片不属于该类,那么相应的权值为负数,反之,权值是正数。

    此外,我们还需要一个额外的偏置量,因为输入往往会带有一些无关的干扰量。

    可得softmax模型函数

    (详见:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html)

    实现回归模型

    首先,导入Tensorflow

    import tensorflow as tf
    

     创建可操作的交互单元

    x = tf.placeholder("float", [None, 784])
    #x是一个占位符placeholder,在运行计算时具体输入x的值
    #[None, 784]表示张量形状
    #None表示此张量的第一个维度可以时任何长度的
    

     设权重值和偏置量

    W = tf.Variable(tf.zeros([784,10]))
    b = tf.Variable(tf.zeros([10]))
    # Variable 代表一个可修改的张量
    #全为零的张量用来初始化w和b,
    # W 的维度是[784,10]
    # b 的形状是[10]
    

     实现模型

    y = tf.nn.softmax(tf.matmul(x,W) + b)
    # tf.matmul(​​X,W) 表示 x 乘以 W 
    

     训练模型

    这里使用交叉熵来评估这个模型

    #训练模型
    #添加一个新的占位符用于输入正确值
    y_ = tf.placeholder("float", [None,10])
    cross_entropy = -tf.reduce_sum(y_*tf.log(y))
    #要求TensorFlow用梯度下降算法以0.01的学习速率最小化交叉熵
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    #始化我们创建的变量
    init = tf.initialize_all_variables()
    #启动模型并初始化变量
    sess = tf.Session()
    sess.run(init)
    
    #训练模型,让模型循环训练1000次
    for i in range(1000):
      batch_xs, batch_ys = mnist.train.next_batch(100)
      sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    

     评估模型

    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
    #确定正确预测项的比例
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    #计算所学习到的模型在测试数据集上面的正确率
    print (sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
    
  • 相关阅读:
    Centos7 禁止firewalld并使用iptables 作默认防火墙
    在Kibana上格式化字段,更好的在dashboard上展示
    利用 ELK系统分析Nginx日志并对数据进行可视化展示
    Nginx 服务器开启status页面检测服务状态
    Linux 上通过binlog文件 恢复mysql 数据库详细步骤
    Linux 为FTP 服务器添加iptables规则--案例分析
    NUMA架构的CPU -- 你真的用好了么?
    Linux 上利用Nginx代理uWSGI处理Flask web应用
    Linux 之不同运维人员共用root 账户权限审计
    Strategy
  • 原文地址:https://www.cnblogs.com/smile321/p/11187700.html
Copyright © 2020-2023  润新知