版权声明:本文为博主原创文章,未经博主允许不得转载。 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)上的一种对操作的实现。因此,同一个操作可能会对应多个内核