2.3 创建运算
现在已经有了一些可以使用的初始张量,你可以做些更有趣的运算,例如加法和乘法。考虑矩阵中的每一行表示货币的交易:转入(正价值)和转出(负价值)。对矩阵取反是一种表示另一个人的资金流动的交易历史的方法。让我们从简单开始,在清单2.3中的m1
张量上运行一个取反运算。对一个矩阵取反会使正数变成对应的负数,反之亦然。
取反(negation)是最简单的运算之一。如清单2.4所示,negation只接收一个张量作为输入,并生成一个张量,其中每个元素都是取反的。尝试运行代码。如果你掌握了negation,你就可以把这个技能推广到所有其他的TensorFlow运算中。
注意 定义运算(如negation)与执行运算是不同的。到目前为止,你已经定义了运算。在第2.4节中,你将用(或运行)它们来计算值。
清单2.4 使用取反运算符
清单2.4产生如下输出:
注意,输出不是[[-1,-2]]
,因为你打印的是取反运算的类型,而不是运算后的实际值。打印的输出表明,取反运算的结果是一个具有名称、形状和数据类型的Tensor
类。名称是自动分配的,但是你也可以在使用tf.negative
时(如代码清单2.4)显式指定。类似地,形状和数据类型是从传入的[[1,2]]
推断出来的。
有用的TensorFlow运算符
官方文档https://github.com/tensorflow/docs/tree/r1.15/site/en/api_docs/python/tf/math详细列出了所有可用的数学操作。常用运算符的具体示例如下:
tf.add(x,y)
——两个类型相同的张量相加,x+y
tf.subtract(x,y)
——两个类型相同的张量相减,x–y
tf.multiply(x,y)
——两个张量元素相乘
tf.pow(x,y)
——求元素x的y次方
tf.exp(x)
——相当于pow(e, x),其中e为欧拉常数(2.718, …)
tf.sqrt(x)
——相当于pow(x, 0.5)
tf.div(x,y)
——两个张量元素相除
tf.truediv(x,y)
——与tf.div
相同,但将参数转换为浮点数
tf.floordiv(x,y)
——与tf.truediv
相同,但将最终结果取整
tf.mod(x,y)
——取元素商的余数
练习2.2
用目前为止学习过的TensorFlow运算符来生成高斯分布(也称为正态分布)。图2.3给出了提示。你可以在https://en.wikipedia.org/wiki/Normal_distribution网站上找到正态分布的概率密度,以供参考。
答案
大多数数学运算符,例如×、-、+等,在TensorFlow中是等效的简洁表达方式。高斯函数包含很多运算,所以用如下的简略符号比较清晰: