TensorFlow内建运算操作
- 一个运算操作代表了一种类型的抽象运算,比如矩阵乘法或者向量加法。
- 一个运算操作可以有自己的属性,但是所有属性都必须被预先设置,或者能够在创建计算图时根据上下文推断出来。
- 通过设置运算操作的属性可以用来支持不同的tensor元素类型,比如让向量加法支持浮点或者整数。
- 运算核(kernel)是一个运算操作在某个具体的硬件(比如cpu或者gpu中)的实现。
- 在TensorFlow中,可以通过注册机制加入新的运算操作或者为已有的运算操作添加新的计算核。
与操作相关的API均位于tf.Operation类中
案例:
数据流图:
代码实现:
import tensorflow as tf
a = tf.constant(5, name="input_a")
b = tf.constant(3, name="input_b")
#节点a和b,引用了Operation:tf.constant()。在TensorFlow中,数据流图中的每个节点都被称为一个Operation(简记Op)
c = tf.multiply(a, b, name="mul_c")
#节点c使用了tf.multiply Op,节点c接收两个输入a和b,然后将它们的乘积输出。
d = tf.add(a, b, name="add_d")
e = tf.add(c, d, name="add_e")
通过会话运行e
sess = tf.Session()
sess.run(e)
运行结果:
23
运算符重载
TensorFlow对常见数学运算符进行了重载,以使乘法、加法、减法及其他常见运算更加简洁。如果运算符有一个或多个参数(操作对象)为Tensor对象,则会有一个TensorFlow Op被调用,并被添加到数据流图中。
张量的重载运算符的完整清单
- 一元运算符
- 二元运算符
利用这些重载运算符可快速地对代码进行整合,但却无法为这些Op指定name值。如果需要为Op指定name值,请直接调用TensorFlow Op。
从技术角度讲,==运算符也被重载了,但它不会返回一个布尔型的Tensor对象。它所判断的是两个Tensor对象名是否引用了同一个对象,若是,则返回True,否则,返回False。这个功能主要是在TensorFlow内部使用。如果希望检查张量值是否相同,请使用tf.equal()和tf.not_equal()。