深度学习入门笔记6 tensorflow学习

Tensorflow

Tensorflow简介

TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow™ 最初是由 Google Brain 团队(隶属于 Google 的 AI 部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。

Tensorflow安装

Tensorflow分为CPU与GPU两个版本,可以使用如下命令安装Tensorflow。
pip install tensorflow(CPU版本)
pip install tensorflow-gpu(GPU版本)
安装之后,在程序中就可以通过import导入使用,按照管理,我们重命名为tf。
import tensorflow as tf
可以通过如下的方式查看tenforflow的版本:
tf.__version__

import tensorflow as tf
# 查看tensorflow的版本。注意:当前tensorflow不支持Python3.7。
tf.__version__

计算方式

Tensorflow是通过数据流图完成计算的。Tensorflow的名称就是Tensor + flow。
Tensor就是张量,张量是深度学习中表示数据的标准方式。简单的说,张量就是多维数组。
flow就是数据的流动,是张量从一端流动到另外一端的过程。
图是由节点与边连接构成,在Tensorflow中,节点表示操作,边表示张量对象(张量的流动)。

官方案例演示

http://playground.tensorflow.org

第一个程序

使用tensorflow的常量编写第一个tensorflow程序Hello world,并观察与以前Python程序有何不同之处。

# Python版本
# s = "Hello"
# s2 = " World"
# s3 = s + s2
# print(s3)

# tensorflow

# 创建tensorflow中的常量。
s = tf.constant("Hello", name="s")
s2 = tf.constant(" World", name="s2")
# s3 = s + s2
s3 = tf.add(s, s2, name="my_add")
print(s)
print(s2)
print(s3)
# tensorflow与Python的计算规则不同,我们输出相关的变量(张量),并不能够得到计算的结果。
# tensorflow是基于计算图的,我们创建的张量会加入到计算图当中。我们对张量执行的操作(加,减,乘,除等)
# 并没有产生真正的计算,而是仅仅描述计算规则而已。

在Tensorflow中,当我们期望计算时,实际上,并没有执行真正的计算,而是把这些计算操作添加到图当中。而计算图在稍后才会执行(图只是用来描述了计算的规则,而并没有产生真正的计算)。
简单说,使用Tensorflow包含两个步骤:

  • 构建图
  • 执行图

思考:为什么要使用图的概念,而不是直接进行像Python那样执行计算?

图的创建

当我们引入tensorflow时,一个空的默认图就已经创建完成了。我们后续创建的节点都会关联到该默认图上。当然,我们也可以自己创建图,然后关联相关的节点。

说明:

  • 可以通过操作对象的graph属性来获取操作所属的图。
  • 可以使用with与as_default来切换默认图。
  • 不同图中定义的操作,不能进行运算。
  • Tensorflow对类型的要求非常严格,不同类型之间无法进行运算。
# 当我们引入tensorflow时,就会创建一个默认图。
# import tensorflow as tf
# 获取默认图。
g = tf.get_default_graph()
# 当我们创建张量,执行操作时,就会自动加入到默认图当中。
a = tf.constant(100)
# 通过张量的graph属性,可以获取张量所属的图。
# print(a.graph is g)
# 我们也可以去创建自己的图,而不是使用默认图。
my_graph = tf.Graph()
# 我们可以通过上下文管理器来设置默认图。
# as_default()返回上下文管理器对象,我们可以与with结合使用。
# 在__enter__方法中,会将当前的图(调用as_default方法的图)设置为默认图。
# 在__exit__方法中,会将默认图恢复成修改之前的图。
with my_graph.as_default():
    # with上下文中,my_graph就是默认图。
#     print(my_graph is tf.get_default_graph())
    # 我们在with上下文中,创建的张量,加入到了my_graph图中。
    b = tf.constant(200)
print(b.graph is my_graph)    
# print(my_graph is g)
# print(my_graph is tf.get_default_graph())

# 不在同一个图的节点不能进行计算。
# 错误!
# a + b

# 在Python中,不同的类型也可能进行计算。例如:int与float, int与bool。
# 但是,Tensorflow的计算对类型要求非常严格,只要不是同一个类型,就不能进行计算。
c = tf.constant(1, dtype=tf.int32)
d = tf.constant(2, dtype=tf.int64)
# 错误。只要不是同一个类型,就不能进行计算。(int32与int64也不可以。)
# c + d
a = 1
b = 2.3
a + b
### 图的运行
我们可以通过创建Session对象,来运行图(获取数据)。Session对象在使用之后需要进行关闭,我们可以使用with来简化关闭的操作。  
我们也可以创建交互式会话(InteractiveSession)。二者之间的差别在于:交互式会话相当于设置了默认的Session。在进行求值时,无需显式指定。

变量与占位符

变量与占位符也是张量Tensor类型。

  • 占位符表示其值由用户进行传递,通常用来存储样本数据与标签。
  • 变量在计算过程中,可以改变其值,通常用来存储模型的参数。

说明:

  • 变量必须要初始化后才能使用。
  • 占位符的数据,需要使用实际值进行填充。

变量的作用域

在我们使用tf.Variable定义变量时,每次执行,就会创建一个新的变量。有时,我们可能并不总是想创建新的变量,而是可以复用已经创建的变量。这样,就可以实现变量共享。
通过tf.variable_scope方法可以创建变量作用域,通过该作用域获取变量时,会进行检查。因此,我们就能够控制创建变量或者复用已经存在(创建好)的变量。

说明:

  • 通过变量作用域,就可以避免意外创建或者共享变量。
  • 使用reuse参数来控制获取变量的行为。该参数的意义如下:
  • 默认为获取新变量,当变量已经存在时,出错。
  • tf.AUTO_REUSE 当变量不存在时,创建变量,存在时,复用已经创建的变量。
  • true 复用变量,当变量不存在时出错。
  • 底层会使用作用域名/变量名:0的方式来标记变量。

程序示例

  1. 使用Tensorflow实现一元线性回归。
    y = 0.5 ∗ x + 0.4 y = 0.5 * x + 0.4 y=0.5x+0.4
  2. 使用Tensorflow实现二元线性回归。
    y = 0.5 ∗ x 1 + 0.3 ∗ x 2 + 0.4 y = 0.5 * x1 + 0.3 * x2 + 0.4 y=0.5x1+0.3x2+0.4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习从入门到放弃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值