zoukankan      html  css  js  c++  java
  • TensorFlow入门

    MNIST是一个深度学习入门的经典例子,是通过对55000张手写数字的识别以及10000张手写数字数据的测试以及5000个验证数据的验证,来了解TensorFlow的基本用法

    每个MNIST数据有两部分,一部分是原始数据,每个图片是28*28的矩阵,在MNIST中已经转换为784的行向量,一行代表一个数据,在python中引用MNIST数据的方式如下:

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

    mnist.train.images表示数据,mnist.train.labels表示标签,这个标签被分成了10列,其中只有1列为1其他列为0,每行数据称为一个tensor(张量),其值均为0到1之间的像素值,标签是0-9之间的

    one-hot vector是一个稀疏向量,也就是大多数维度上都为0,仅有一个为1

    Softmax Regressions

    softmax回归是logistic回归的推广,logistics回归主要解决的是二分类的问题,而softmax回归主要解决的是多分类的问题。

    我们对输入的原始数据赋予一个权重和偏差,得到:

    (evidence_i={sum_j}{W_{i,j}}{x_i}+{b_i})

    其中(W_{i,j})是权重,(b_i)是偏差,(x_i)是输入变量,(i)表示的是第(i)个类别

    然后通过softmax回归,得到:

    (y= ext{softmax}(evidece))

    这里的softmax函数可以视作一个激活函数或者是连接函数,把线性函数变换成我们想要的形式,那么我们就得到了10中情况下的概率分布,你可以通过以下的公式得到真正的概率:

    ( ext{softmax}(x)= ext{normalize}( ext{exp}(x)))

    扩展等式后得到:

    ( ext{softmax}(x)=frac{ ext{exp}(x_i)}{sum_j ext{exp}(x_j)})

    利用TensorFlow实现softmax方法

    import TensorFlow as tf
    x = tf.placeholder(tf.float32, [None, 784])
    

    x表示tf的一个占位符placeholder,其类型是tf.float32,其shape是[None,784]其中None可以表示任意的值,在矩阵大小不确定的时候用这种表示方式

    再定义权重W和偏量b

    W = tf.Variable(tf.zeros([784,10]))
    b = tf.Variable(tf.zeros([10]))
    

    把W和b都定义为变量,括号内是其初始值tf.zeros([10])在这里表示的是一个一行10列的行向量,与np.zeros([10])表示的是一样的

    现在我们使用TensorFlow的矩阵乘法来实现softmax:

    y = tf.nn.softmax(tf.matmul(x,W)+b)
    

    计算机器学习模型的性能

    利用交叉熵来评判算法的性能,作为softmax的损失函数,

    $H_{yprime}(y)=-sum_i{y_i}{prime}log(y_i) $

    其中y是预测的概率分布,(y^prime)是真实分布,交叉熵是用于测量预测值描述真实值的无效程度的

    为了计算交叉熵,需要增加一个占位符

    y_=tf.placeholder(tf.float32,[None,10])
    

    然后用下式表示交叉熵:

    cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
    

    开始训练和实施模型

    通过TensorFlow的train开始训练:

    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
    

    其中的梯度下降是一个简单的下降方法,训练目标是要求最小化交叉熵

    利用InteractiveSession来运行模型

    sess = tf.InteractiveSession()
    

    首先要初始化我们设置的变量

    tf.global_variables_initializer().run()
    

    下面开始训练,

    for _ 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))
    

    tf.argmax(y,1)用于计算每一列最大值,通过tf.equal得到一个全为bool值的向量,通过tf.reduce_mean求出精度:

    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    

    最终,对测试数据进行实验

    print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
    
  • 相关阅读:
    PDF太大怎么办?缩小PDF的4种常用方法
    电脑插上网线无法连接网络完美解决方案
    HTTP攻击与防范-跨站攻击-01简介
    HTTP攻击与防范-跨网站脚本攻击
    HTTP攻击与防范-PHP客户端脚本攻击
    HTTP攻击与防护-函数注入攻击
    HTTP攻击与防范-命令注入攻击
    重置NSX防火墙策略
    NBU8.1安装
    Vcenter由Win2008r2迁移到linux
  • 原文地址:https://www.cnblogs.com/drawon/p/8520711.html
Copyright © 2011-2022 走看看