TensorFlow中的计算图学习

简介:

        官网上对TensorFlow的介绍是: 一个使用数据流图(data flow graphs)技术来进行数值计算的开源软件库 

   (有点类似于这样 :)

    

        TensorFlow包含构建数据流图与计算数据流图等基本步骤,图中的节点表示数学操作,图中连结各节点的边表示多维数组,即:tensors(张量)。 张量是TensorFlow最核心的组件,所有运算和优化都是基于张量进行的。张量是基于向量和矩阵的推广,可以将标量看为零阶张量,矢量看做一阶张量,矩阵看做二阶张量。

 

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

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

  •   2、在session中执行计算

在这几行代码中完全体现了这两项操作

(      还额外包括了  :

  • 将数据表示为tensors;

  • 使用Variables来保持状态信息;

  • 分别使用feeds和fetches来填充数据和抓取任意的操作结果;   )


import tensorflow as tf
a =tf.placeholder("float")
b =tf.placeholder("float")
y = tf.multiply(a,b)
sess = tf.Session()
print(sess.run(y, feed_dict={a: 3, b: 3}))

--------------------- 
转载于 作者:Jasen_Fu 

张量的阶数:

                  TensorFlow用张量表示所有的数据,张量可看成一个n维的数组或列表,在图中的节点之间流通。张量的维数称为阶,在另一片文中有相应的一些介绍。

计算图

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

import tensorflow as tf

x = tf.constant(10)
y = tf.constant(15)
print(x.graph)


结果为:
<tensorflow.python.framework.ops.Graph object at 0x000001AE613E8E80>

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

############# 代码借鉴于https://www.cnblogs.com/hypnus-ly/p/8040951.html 这位朋友的博客#######

tensorflow中的计算图不仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制,具体的可以到上面这位朋友的博客中看。

import tensorflow as tf

x = tf.constant(10)
y = tf.constant(15)
print(x+y)



结果:   Tensor("add_1:0", shape=(), dtype=int32)

我们观察一下这里的输出信息,一共是三个,代表了张量在存储时候的三种属性:

                                                                         名字(name)、维度(shape)和类型(type)

其中,name属性以“node:src_output”的形式表示,node表示节点的名称,src_output表示当前张量来自节点的第几个输出。

还可以通过result.get_shape函数来获取结果张量的维度信息。

tensorflow中session的讲解

创建session的三种方式:

# 1、 创建一个会话
with tf.Session() as sess:
    print(sess.run(result))
# tensorflow中需要手动指定默认会话,当该会话指定后,可以通过tf.Tensor.eval函数来计算一个张量的取值。
# 2、 创建一个默认的会话
sess=tf.Session()
with sess.as_default():   # 需要在这里先指定一个会话,也就是指定一个sess的名称(有点类似于namespace吧)
    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()

猜你喜欢

转载自blog.csdn.net/Pierce_KK/article/details/83057836