TensorFlow入门——计算图,张量,会话

目录

TensorFlow计算模型——计算图

TensorFlow数据模型——张量

TensorFlow运行模型——会话


TensorFlow计算模型——计算图

计算图是TensorFlow中最基本的一个概念,所有的计算都会转换成计算图上的结点,而结点上的边描述了计算之间的依赖关系。

在tensorflow程序中,系统会自动维护一个默认的计算图,可以通过tf.get_default_graph()函数获取。

文中测试代码均来自书《TensorFlow实战Google深度学习框架》

下面代码给出了一个样例:

import tensorflow as tf 
# 定义一个常量使用tf.constant方法
a=tf.constant([1.0,2.0], name='a') 
b=tf.constant([1.0,2.0], name='b') 
result = a+b 
# 通过a.graph可以查看张量所属的计算图,如果没有特别指定,则属于当前默认的计算图
print(a.graph is tf.get_default_graph()) # 输出为True

可以使用tf.Graph来生成新的计算图,如:

##代码来自书《TensorFlow实战Google深度学习框架》
g1=tf.Graph()
with g1.as_default():
    # 在计算图g1中定义变量'v',并设置初始值为0。
    v=tf.get_variable('v',initializer=tf.zeros_initializer()(shape = [1]))
    
g2=tf.Graph()
with g2.as_default():
    # 在计算图g2中定义变量'v',并设置初始值微1。
    v=tf.get_variable('v',initializer=tf.ones_initializer()(shape = [1]))

# 在计算图g1中读取变量'v'的取值
with tf.Session(graph=g1) as sess:
    tf.global_variables_initializer().run()
    with tf.variable_scope('',reuse=True):
        # 在计算图g1中,变量'v'的取值应该为0,下一行代码会输出[0.]。
        print(sess.run(tf.get_variable('v')))

# 在计算图g2中读取变量'v'的取值
with tf.Session(graph=g2) as sess:
    tf.global_variables_initializer().run()
    with tf.variable_scope('',reuse=True):
        # 在计算图g2中,变量'v'的取值应该为1,下一行代码会输出[1.]。
        print(sess.run(tf.get_variable('v')))

在运行不同的计算图时,v的结果是不一样的。这种机制可以隔离张量和计算,还提供了管理张量和计算的机制。

另外,计算图可以通过tf.Graph.device来指定运行计算的设备:

# 指定计算运行的设备:GPU。
with g.device('/gpu:0'):
    result=a+b

TensorFlow数据模型——张量

TensorFlow的名字中就包含了它的两个重要概念——tensor和flow。tensor即张量,表现了TensorFlow的数据结构,他是TensorFlow管理数据的形式。从功能上讲,它可以被理解为一个多维数组,第一阶张量为向量(vector),也就是一维数组,第n阶张量可以理解为一个n维数组,零阶张量表示标量。

# tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中。
a=tf.constant([1.0,2.0], name='a')
b=tf.constant([1.0,2.0], name='b')
result = tf.add(a,b,name='add')
print(result)
'''
输出:Tensor("add:0", shape=(2,), dtype=float32)
'''

注意:这里的加法得到的是对结果的引用,它的计算结果并不是一个数字,体现了一个张量的结构:名字(name),维度(shape),类型(type)。

在运算中,TensorFlow支持的数据类型有:tf.float32,tf.float64,tf.int8,tf.int16,tf.int32.tf.int64,tf.uint8,tf.bool,tf.complex64,tf.complex128

张量中本身没有存储具体数字,但是可以通过会话(session)来获得具体数字。

TensorFlow运行模型——会话

会话(session)可以管理TensorFlow程序运行的所有资源,计算完成之后可以通过关闭会话,使系统释放资源。

# 1、 创建一个会话,看前面张量的取值,这种方式无需关闭,上下文退出时会话关闭
with tf.Session() as sess:
    print(sess.run(result))

# tensorflow中需要手动指定默认会话,当该会话指定后,可以通过tf.Tensor.eval函数来计算一个张量的取值。
# 2、 创建一个默认的会话
sess=tf.Session()
with sess.as_default():
    print(result.eval())

# 3、 创建一个会话
sess=tf.Session()
# 下面两个命令等价
print(sess.run(result))
print(result.eval(session=sess))

# 在交互式环境下,使用设置默认会话的方法来获取张量的取值更加方便,tensorflow提供了一种在交互式环境下直接构建
# 默认会话的函数,tf.InteractiveSession。该函数会自动将生成的会话注册为默认会话。
sess= tf.InteractiveSession()
print(result.eval())
sess.close()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值