深度学习笔记一

这篇博客记录了作者学习深度学习的过程,特别是TensorFlow的使用。内容包括TensorFlow的安装、变量、常量、占位符的概念及用法,以及如何计算模型的准确率。此外,还提到了RNN循环神经网络的基础模型构建和训练过程。
摘要由CSDN通过智能技术生成


一些学习网站记下来

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})

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值