Tensorflow计算图学习

Tensorflow计算图学习

tensorflow程序一般分为两个阶段:

1、定义计算图所有的计算

2、在session中执行计算

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

import tensorflow as tf 
a=tf.constant([1.0,2.0], name='a') # 定义一个常量使用tf.constant方法
b=tf.constant([1.0,2.0], name='b') 
result = a+b 
print(a.graph is tf.get_default_graph())

通过a.graph可以查看张量所属的计算图,如果没有特别指定,则属于当前默认的计算图
输出为True

tensorflow可以通过tf.Graph函数生成新的计算图。不同计算图上的张量和运算都不会共享

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

tensorflow中的计算图不仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。计算图可以通过tf.Graph.device函数来指定运行计算的设备,下面代码指定在GPU上运行加法计算:

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

在一个计算图中,可以通过集合(collection)来管理不同类别的资源。比如通过tf.add_to_collection函数可以将资源加入到一个或多个集合中,然后通过tf.get_collection获取集合里的资源。

tensorflow中张量的概念

tensorlfow中,所有的数据都为张量。其中,零阶张量表示标量(scalar),代表一个数;一阶张量表示向量(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)。其中,name属性以“node:src_output”的形式表示,node表示节点的名称,src_output表示当前张量来自节点的第几个输出。还可以通过result.get_shape函数来获取结果张量的维度信息。

tensorflow中session的讲解

创建session的三种方式:

1、 创建一个会话

# 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()

使用tf.ConfigProto函数配置会话,示例如下:

config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
sess1=tf.InteractiveSession(config=config)
sess2=tf.Session(config=config)

**allow_soft_placement:**一个布尔类型的参数。当为True时,在以下条件下,可以将GPU上的运算方
法CPU上。
log_device_placement:一个布尔类型的参数。当设置为True时,日志中将会记录每个节点被安排在
了那个设备上方便调试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值