title: tensorflow运行方式
date: 2020-05-03 08:51:28
tags: 神经网络

从hello world(mnist)记起–tensorflow文档

  1. 一个数组数组可以表示这个图像
img
  1. mnist.train.images的形状为【60000,784】的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片的像素点
img

回归模型

  1. 我们希望得到给定图片属于代表每个数字的概率,softmax回归用来做这件事情分为两步
    • 为了得到一张给定图片属于某个数字类的证据,我们对图片像素值进行加权求和
    • 如果这个图片具有很强的证据说明这种图片不属于某类,则相应的权值为负值,相反为正值
    • 加入一个偏置量来减弱干扰
    • y=softmax(evidence)–激活函数用如下图来解释softmax模型
    • img
    • 用一个向量表示这个计算过程
    • img
    • 可以表示为 y = softmax(w+b)

训练模型

  1. 训练的模型有好有坏,这个时候需要一个评估标准,而这个标准就是成本/损失。之后我们通过某种方法最小化这个指标
  2. 交叉熵和我在论文中用到的对比损失函数无疑是比较优秀的函数,而计算交叉熵需要添加一个占位符
    • y_ = tf.placeholde("float32",[None,10])
  3. 紧接着我们可以用梯度下降算法最小化我们的损失值(其实我们只需调整一行代码就可以改变最小化损失值的算法)train_step=tf.train.G....(0.01).mninmize(损失函数)
  4. 初始化然后启动
    • init=tf.initialize_all_variables()
    • sess=tf.Session() sess.run(init)
  5. 每次随机抓100个数据训练模型(这是为了减小开销,毕竟全部训练最准确(一定吗?))
    • 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})

评估模型

  1. 预测正确的标签必不可少。tf.argmax可以给出某个tensor对象在某一维上的其数据最大值所在的索引值
    • correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_1))
    • accuracy=tf.reduce_mean(tf.cast(correct_prediction,"float"))
    • sess.run(accuracy,feed_fict={x:mnist.test.images,y_:mnist.test.labels})