TensorFlow计算图,张量,会话基础知识

import tensorflow as tf
get_default_graph = "tensorflow_get_default_graph.png"
# 当前默认的计算图 tf.get_default_graph
print(tf.get_default_graph())

# 自定义计算图
# tf.Graph

# g1中定义名字为v的变量 初始化为0
g1 = tf.Graph()
with g1.as_default():
    v = tf.get_variable("v", shape=[1],
                        initializer=tf.zeros_initializer())

# g2中定义名字为v的变量 初始化为1
g2 = tf.Graph()
with g2.as_default():
    v = tf.get_variable("v", shape=[1],
                        initializer=tf.ones_initializer())

# initialize_all_variables  Use `tf.global_variables_initializer` instead.
# 在计算图g1中读取变量v的取值  result is[ 0.]
with tf.Session(graph=g1) as sess:
    # tf.initialize_all_variables().run()
    tf.global_variables_initializer().run()
    with tf.variable_scope("", reuse=True):
        print(sess.run(tf.get_variable("v")))

# 在计算图g2中读取变量v的取值  result is [1.]
with tf.Session(graph=g2) as sess:
    # tf.initialize_all_variables().run()
    tf.global_variables_initializer().run()
    with tf.variable_scope("", reuse=True):
        print(sess.run(tf.get_variable("v")))

'''
#计算图可以隔离张量和计算也可以指定计算设备
g=tf.Graph()
#指定GPU
with g.device("/gpu:0"):
    result=a+b

'''

2、张量

import tensorflow as tf

#tensor 张量 零阶张量是标量scalar 一阶张量是向量vector n阶张量理解为n维数组
#张量在TensorFlow中不是直接采用数组的形式,只是运算结果的引用。并没有保存数组,保存的是如何得到这些数字的计算过程

#tf.constan是一个计算,结果为一个张量,保存在变量a中
a=tf.constant([1.0,2.0],name="a")
b=tf.constant([2.0,3.0],name="b")

result=a+b
print(result)
#Tensor("add:0", shape=(2,), dtype=float32)

result=tf.add(a,b,name="add")
print(result)
#Tensor("add_1:0", shape=(2,), dtype=float32)
#张量保存三个属性  名字name(唯一标识)  维度shape  类型 dtype
#张量的命名是node:src_output形式给出,node是节点名称,src_output是表示张量来自节点第几个输出
#add_1:0 说明是add节点的第一个输出(编号从0开始)
#shape=(2,) 以为数组,长度为2

#dtype=float32 每个张量类型唯一,不匹配将报错
'''
a=tf.constant([1,2],name="a")
b=tf.constant([2.0,3.0],name="b")
result=a+b
print(result)
#ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("b_1:0", shape=(2,), dtype=float32)'
'''

#result.get_shape 获取张量的维度
print(result.get_shape)
# result
# <bound method Tensor.get_shape of <tf.Tensor 'add_1:0' shape=(2,) dtype=float32>>

#当计算图构造完成后,张量可以获得计算结果 (张量本身没有存储具体的数字)


#使用session来执行定义好的运算 (也就是张量存储了运算的过程,使用session执行运算获取结果)
#创建会话
sess=tf.Session()
res=sess.run(result)
print(res)
#result is [ 3.  5.]
#关闭会话是本地运行使用到的资源释放
sess.close()

#也可以使用python上下文管理器机制,吧所有的计算放在with中,上下文管理器推出是自动释放所有资源,可以避免忘记sess.close()去释放资源

with tf.Session() as sess:
    print(sess.run(result))
#[ 3.  5.]


#as_default 通过默认的会话计算张量的取值 会话不会自动生成默认的会话,需要手动指定 指定后可以通过eval来计算张量的取值
sess =tf.Session()
with sess.as_default():
    print(result.eval())
#[ 3.  5.]

#ConfigProto来配置需要生成的会话
#allow_soft_placement GPU设备相关
#log_device_palcement 日志相关
config=tf.ConfigProto(allow_soft_placement=True,
                      log_device_placement=True)
sess1=tf.InteractiveSession(config=config)
sess2=tf.Session(config=config)
#Device mapping: no known devices.  tensorflow\core\common_runtime\direct_session.cc
#Device mapping: no known devices.


#PY\35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

猜你喜欢

转载自www.cnblogs.com/xiaoboge/p/10457054.html