斯坦福CS224n笔记-Tensorflow入门(一)

简介

深度学习框架有助于扩展机器学习代码,可自动计算梯度。
许多预训练模型(pre-train model)在网上都能得到,所以gpu等资源有限的人并不需要每次都从头开始,我们可以站在巨人的肩膀上,利用他们手机的数据进行代码或者算法的改进。这些框架都会提供gpu接口,gpu因为并行化(parallelization)通常会使代码加速计算的很快。
为了在深度学习方面取得进步,利用tensorflow学习框架是必要的,它对你的项目会很有帮助。那么tensorflow到底是什么呢?
Tensorflow就是由Google开发的一种深度学习框架,一种使用流式图进行数值计算的开源软件库,它专注于机器学习领域的研究。用Google Brain 团队的话来说,Tensorflow是用于表示机器学习算法的接口并且可以执行这种算法。

工作原理

Big Idea:数值计算表示为计算图------程序的主干是一个图

  • 图节点是操作,每个节点都会有多个输入和一个输出
  • 节点之间的边表示他们之间流动的张量(Tensors),张量是一个n维数组
    流式图作为深度学习框架的主干的好处是:它允许你用小儿简单的操作建立复杂的模型——这会使得梯度计算很简单(因为有自动求导)。
    another idea:每一个操作都是可以在其所在点被评估的一个函数
举一个拥有一个隐藏层扽神经网络的例子

在tensorflow中的计算图如图所示:在这里插入图片描述

h=ReLU(Wx+b)

ReLU是一种修正线性单元的激活函数,就像sigmoid是一个激活函数。我们在线性输入上添加一些非线性函数,这能够赋予神经网络一定的表达能力,然后ReLU就是表示Max(0,x),在输入和0之间取得最大值。
W和b是变量(variable) 是输出当前值有状态的节点,保留多次执行运算过程中的当前值。
变量的其他特征:

  1. 这些训练过程中和训练后的变量可以被保留在硬盘中,允许来自不同公司、小组的人保存存储并且可以发送这些模型参数给别人。
  2. 默认自动进行梯度更新,然后应用到所有变量上和图中,这样可以把我们想要的变量进行微调,使得损失最小化(minimize loss)。由此可见W和b是一种操作,根据定义图中的所有节点都是操作,所以评估带有这些运行过程中的变量的操作时,很快就可以得到这些变量的值。
    x是占位符(placeholders):在运行时间才会接受值的节点。
    假如你的图需要依赖外部数据输入,而你不希望在建立图时就要来这些实际值,所以我们可以在训练过程中添加一些充当占位符的值到计算中,对于这些充当占位符的值,大家先想到的时初始化,不是这样的,我们仅仅分配一种数据类型,分配一种大小的张量。然后我们的图就知道自己要计算什么了(尽管没有实际存储的值)。
    数学操作节点:矩阵乘法、加法或者激活函数,我们调用tensorflow中的数学运算而不是numpy。
    Incode建立图
import tensorflow as tf
b=tf.Variable(tf.zero((100,))) #初始化为大小为100维的0向量
W=tf.Variable(tf.random_uniform((784,100),-1,1))##服从[-1,1]均匀分布,矩阵大小为184*100的Tensorflow变量
x=tf.placeholder(tf.float32,(100,784))#创建占位符(它没有被初始化为任何值,仅仅时接受32 位浮点数的数据类型)
h=tf.nn.relu(tf.matmul(x,W)+b)

此时我们没有任何数据,只是在图的内部建立了符号,x只有在运行时才会有数据的流动,现在只是建立了模型的主干,真想看看到底图中发生了什么,我们可以调用get_operations,就可以看到途中所有的节点。
在这里插入图片描述

如何运行它

在tensorflow中运行图形的方式就是将其部署,在一个叫做会话(session)的地方,session是与特定的执行环境(cpu或gpu)的绑定,因此我们利用它可以把已构建好的图形部署到cpu或gpu上,所以session就像是一种支持图中的操作执行的硬件环境。
session就像是硬件环境支持图中所有操作的执行,

import numpy as np
sess=tf.session()#创建一个会话对象
sess.run(tf.initialize_all_variables())#初始化所有变量 
sess.run(h,{x:np.random(100,784)})

sess.run(fetches,feeds)
fetches 是单个图节点,类型是列表或者tensor向量,想要节点输出,这是实际计算值的节点
feeds 是一个从图节点映射到模型中运行的实际值的字典(可以说是给使用placeholder创建出的tensor赋值),这是填写placeholder实际值的地方

这是概念密集型流程,称为懒惰评估,就是指图表的评估只会在运行时发生。我们可以在tensorflow中给运行时间添加一个解释,就是一旦我们建立了会话,我们就可以准备好实际调用,不像tensorflow运行时间,将初始化BMW的值粘贴或赋值给那些注释。(我没懂这段话)

问题:占位符和变量之间的关系?
答:变量是真正重要的参数,x是数据而不是我们感兴趣的需要调优的参数,我们几乎可以把它们视为直接对应关系。在我们建立的模型中,刚开始的时候对我们模型中的参数进行初始化很重要,使它们有一个初始状态,而我们的输入就没有状态。如果有人想要拿走我们的模型,将它给别人使用,这其中不包含任何实际的数据值,数据是任意的,模型中的参数才是你的模型的根基,这些参数会使你的模型更有趣,模型的计算实际上就是计算这些参数

总结

我们先使用变量和占位符建立了一个图,然后再把我们的图部署到session上,即我们的执行环境,接下来我们学习如何训练模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值