TensorFlow机器学习(原书第2版)
上QQ阅读APP看书,第一时间看更新

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)——两个类型相同的张量相减,xy

tf.multiply(x,y)——两个张量元素相乘

tf.pow(x,y)——求元素xy次方

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中是等效的简洁表达方式。高斯函数包含很多运算,所以用如下的简略符号比较清晰: