【Tensorflow】Tensorflow的图、会话、设备、变量、内核

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Daycym/article/details/83541579

前言

基础知识,前面我们介绍到,Tensorflow的数据流图是由节点和边组成的有向无环图,此外,还涉及一些其他概念,如图、会话、设备、变量、内核等。

图(Graph)

import tensorflow as tf

# 创建图
# 创建一个常量运算操作,产生一个1 x 2的矩阵
matrix1 = tf.constant([[3., 3.]])
# 创建另一个常量运算操作,产生一个2 x 1的矩阵
matrix2 = tf.constant([[2.], [2.]])
# 创建一个矩阵乘法运算,把matrix1 和matrix2 作为输入
# 返回值product 代表矩阵乘法的结果
product = tf.matmul(matrix1, matrix2)

会话(Session)

启动图的第一步是创建一个Session对象。会话提供在图中执行操作的一些方法,建立会话后,生成一张空图,在会话中添加节点和边,形成一张图,然后执行。

# 会话
with tf.Session() as sess:
	# 调用Session对象的run()方法来执行图时,传入一些Tensor(此过程称为填充(feed))
	# 返回结果,这个过程称为(fetch)
    result = sess.run([product])
    print(result)
输出我:[array([[12.]], dtype=float32)]

会话是图交互的一个桥梁,一个会话可以有多个图,会话可以修改图的结构,也可以往图中注入数据进行计算。
主要有两个API接口:Extend和Run
Extend操作:是在Graph中添加节点和边
Run操作:是输入计算的节点和填充必要的数据后,进行运算,并输出运算的结果

设备(device)

设备是指一块用来运算的硬件,如GPU和CPU,主要是为了实现分布式执行操作,充分利用计算资源,我们可以明确指定操作在哪个设备上执行。

import tensorflow as tf

# 设备
with tf.Session() as sess:
    matrix1 = tf.constant([[3., 3.]])
    matrix2 = tf.constant([[2.], [2.]])

    product = tf.matmul(matrix1, matrix2)
    # 指定在第二个GPU上运行
    with tf.device("/gpu:1"):
        result = sess.run([product])
        print(result)
输出为:[array([[12.]], dtype=float32)]

变量(variable)

变量在Tensorflow是一种特殊的数据,它在图中有固定的位置,不像普通的张量那样可以流动。

  • 使用tf.Variable()构造函数
  • 这个函数需要一个初始值,形状和类型
# 创建一个变量,初始化为标量0
state = tf.Variable(0, name="counter")
# 创建一个常量张量
input1 = tf.constant(3.0)

Tensorflow提供了填充机制,可以在构建图时使用,tf.placeholder()临时替代任意操作的张量,在调用Session对象的run()方法来执行图时,使用填充数据作为调用的参数,调用结束后,填充数据就消失。

# tf.placeholder()临时替代任意操作的张量
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
with tf.Session() as sess:
    print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
输出为:[array([14.], dtype=float32)]

内核(kernel)

内核是能够在特定设备(如GPU、CPU)上的一种对操作的实现。因此,同一个操作可能会对应多个内核

猜你喜欢

转载自blog.csdn.net/Daycym/article/details/83541579