一些学习网站记下来
http://deeplearning.net/tutorial/contents.html
https://github.com/aymericdamien/TensorFlow-Examples
https://www.tensorflow.org
http://mp.weixin.qq.com/s/qmm1xyvnHvWhuUvd9lDjfw
http://mp.weixin.qq.com/s/xKOtyXuVkjTXu67o6f4IBg
http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650721853&idx=3&sn=f9f0048cccefbf9c00dc94f2a71c7d00&chksm=871b0a43b06c8355376d1bc897b4f3585b4a129d77a9e5b025f4c344f2ef264c05133cff7682&scene=21#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247484309&idx=1&sn=31da838b2fbd4647f4b84f94a66c104f&chksm=e9293e9ade5eb78cd4a210bcd82df0d2ea6fc64d4231aedeb86395f2d1219a0ec40d9de301bb&scene=0&key=1a602d525bf2cc7acceb73f7648e5539e03fb8943d0fc11d5fc79a9812dad52dc5b9adf57f8da30884c16c74e384d99f1e3c3234a73ff3d22abc8a802937276a7d4c837aa8f09f05cc3302f35506c94e&ascene=0&uin=MTEyNDM1NzgxMA%3D%3D&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.11.6+build
今天学习TensorFlow;开始记笔记~\(≧▽≦)/~啦啦啦
1.安装:https://www.tensorflow.org参考官网的安装步骤即可
2.变量:包括矩阵、向量等
y=wx+b 。这里的w和b就是要训练的参数,在训练前就可以用变量来表示
w = tf.Variable(0.0, name="weights") //初始化w为0
或者:W = tf.Variable(tf.zeros(shape=[1,2]))最简单的方式定义一个变量,shap[1,2]二维矩阵,返回两个值)二维矩阵
b= tf.Variable (tf.zeros([100]),name="bias") zero表示创建矩阵,创建一个100x 100的零矩阵
实例定义:
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
a = tf.nn.softmax(tf.matmul(x, W) + b)# a表示模型的实际预测输出利用softmax可以得到模型对某个图片应该划分哪个各类别的概率
3.常量
k = tf.constant(3.0) #表示定义一个值为3.0的常量。
4.占位符placeholder
x = tf.placeholder(tf.float32,[1,28*28])输入
y = tf.placeholder(tf.float32,[None,10])预期输出还有实际预测输出,(预期输出会和实际预测输出对比得出准确率)
上面x中[1,28*28]表示输入的数据有1行,每行有28x28个值。
而y中出现了[None,10]这种语法,表示接受任意行数的数据,输出为10个值。
4.准确率
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))//y是预期输出和实际预测输出对比,得到一个true or false矩阵代表本轮预测的正确与否
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) //计算true所占的比例得到准确率
- x为输入28*28特征值,y为输出的10种分类。
- w和b要将输入的28*28转换为10种分类,利用softmax可以得到模型对某个图片应该划分哪个各类别的概率。
- 最后要判断本次预测的精度,tf.argmax(a,1)可以找到各行a的最大值的index,将其与对应的y的index比较,得到一个Ture or False矩阵,代表本轮预测的正确与否,最后计算true的比例求得accuracy。
RNN循环神经网络
先建立抽象模型
x = tf.placeholder(tf.float32, [None, 784]) # 输入占位符
y = tf.placeholder(tf.float32, [None, 10]) # 输出占位符(预期输出)
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
这里W
的维度是[784,10],因为我们想要用784维的图片向量乘以它以得到一个10维的证据值向量,每一位对应不同数字类。b
的形状是[10],所以我们可以直接把它加到输出上面。
a = tf.nn.softmax(tf.matmul(x, W) + b) # a表示模型的实际输出
首先,我们用tf.matmul(X,W)
表示x
乘以W
,对应之前等式里面的,这里x
是一个2维张量拥有多个输入。然后再加上b
,把和输入到tf.nn.softmax
函数里面
然后输入数据开始训练模型
首先初始化变量
sess = tf.InteractiveSession() # 建立交互式会话
tf.initialize_all_variables().run()
然后开始训练模型,这里我们让模型循环训练1000次!
为了计算交叉熵,我们首先需要添加一个新的占位符用于输入正确值:(交叉熵还木有理解)有的文档里没有定义y_,我暂时把它理解成和y是一个东西吧,其实y_就是正确值
y_ = tf.placeholder("float", [None,10])
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
首先,用
tf.log 计算
y 的每个元素的对数。接下来,我们把
y_ 的每一个元素和
tf.log(y) 的对应元素相乘。
最后,用 tf.reduce_sum 计算张量的所有元素的总和(cross_entropy)。
train_step
= tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
在这里,我们要求TensorFlow用梯度下降算法(gradient descent algorithm)以0.01的学习速率最小化交叉熵。梯度下降算法(gradient descent algorithm)是一个简单的学习过程,TensorFlow只需将每个变量一点点地往使成本不断降低的方向移动.
这里它返回给你的只是一个单一的操作train_step,当运行这个操作时,它用梯度下降算法训练你的模型,微调你的变量,不断减少成本。
开始训练:
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(1000) # 获得一批100个数据
train_step.run({x: batch_xs, y: batch_ys}) # 给训练模型提供输入和输出,它用梯度下降算法训练你的模型,微调你的变量,不断减少成本。
该循环的每个步骤中,我们都会随机抓取训练数据中的100个批处理数据点,然后我们用这些数据点作为参数替换之前的占位符来运行train_step
。
correct_prediction
= tf.equal(tf.argmax(y,1), tf.argmax(y_,1))//这里y表示预测标签(上面准确率标题里面的a),y_表示正确标签
[True, False, True, True]
会变成 [1,0,1,1]
,取平均值后得到 0.75
.最后,我们计算所学习到的模型在测试数据集上面的正确率。accuracy = tf.reduce_mean(tf.cast(
correct_prediction
, "float"))
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})