title: tensorflow运行方式
date: 2020-05-03 08:51:28
tags: 神经网络
从hello world(mnist)记起–tensorflow文档
- 一个数组数组可以表示这个图像
- mnist.train.images的形状为【60000,784】的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片的像素点
回归模型
- 我们希望得到给定图片属于代表每个数字的概率,softmax回归用来做这件事情分为两步
- 为了得到一张给定图片属于某个数字类的证据,我们对图片像素值进行加权求和
- 如果这个图片具有很强的证据说明这种图片不属于某类,则相应的权值为负值,相反为正值
- 加入一个偏置量来减弱干扰
- y=softmax(evidence)–激活函数用如下图来解释softmax模型

- 用一个向量表示这个计算过程

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

