zoukankan      html  css  js  c++  java
  • 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}))
    
  • 相关阅读:
    gcc -I -L -l区别
    如何在LINUX中开机、登陆、退出、定时、定期自动运行程序
    4B/5B编码原理
    powerpc平台移植zebra或quagga-0.99.23
    ubuntu 命令配置ip 网关 dns
    ubuntu新机安装工具
    svn add --no-ignore
    SSL handshake failed: SSL error: Key usage violation in certificate has been detected.
    netif_start_queue/netif_wake_queue/netif_stop_queue
    Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
  • 原文地址:https://www.cnblogs.com/smile321/p/11187700.html
Copyright © 2011-2022 走看看