声明操作符
现在,我们必须了解我们可以添加到 TensorFlow 图的其他操作。
做好准备
除了标准算术运算之外,TensorFlow 还为我们提供了更多我们应该了解的操作以及如何在继续操作之前使用它们。同样,我们可以通过运行以下代码来创建图会话:
import tensorflow as tf
sess = tf.Session()
操作步骤
TensorFlow 对张量有标准操作,即add()
,sub()
,mul()
和div()
。请注意,除非另有说明,否则本节中的所有操作都将按元素评估输入:
- TensorFlow 提供了
div()
和相关函数的一些变体。 - 值得一提的是
div()
返回与输入相同的类型。这意味着如果输入是整数,它确实返回了分区的底线(类似于 Python 2)。要返回 Python 3 版本,它在分割之前将整数转换为浮点数并始终返回浮点数,TensorFlow 提供truediv()
函数,如下所示:
print(sess.run(tf.div(3, 4)))
0
print(sess.run(tf.truediv(3, 4)))
0.75
- 如果我们有浮点数并想要整数除法,我们可以使用
floordiv()
函数。请注意,这仍然会返回一个浮点数,但它会向下舍入到最接近的整数。这个函数如下:
print(sess.run(tf.floordiv(3.0,4.0)))
0.0
- 另一个重要函数是
mod()
。此函数返回除法后的余数。它如下:
print(sess.run(tf.mod(22.0, 5.0)))
2.0
- 两个张量之间的交叉积通过
cross()
函数实现。请记住,交叉乘积仅针对两个三维向量定义,因此它只接受两个三维张量。以下代码说明了这种用法:
print(sess.run(tf.cross([1., 0., 0.], [0., 1., 0.])))
[ 0\. 0\. 1.0]
- 这是一个更常见的数学函数的紧凑列表。所有这些函数都以元素方式运行:
abs() |
一个输入张量的绝对值 |
ceil() |
一个输入张量的向上取整函数 |
cos() |
一个输入张量的余弦函数 |
exp() |
基于e 指数的一个输入张量 |
floor() |
一个输入张量的向下取整函数 |
inv() |
一个输入张量的乘法逆(1 / x) |
log() |
一个输入张量的自然对数 |
maximum() |
元素最多两个张量 |
minimum() |
两个张量的元素分钟 |
neg() |
负输入张量为负 |
pow() |
第一个张量元素提升到第二个张量元素 |
round() |
舍入一个输入张量 |
rsqrt() |
一个超过一个张量的平方根 |
sign() |
返回-1,0 或 1,具体取决于张量的符号 |
sin() |
一个输入张量的正弦函数 |
sqrt() |
一个输入张量的平方根 |
square() |
一个输入张量的平方 |
- 专业数学函数:有一些特殊的数学函数可以在机器学习中使用,值得一提,TensorFlow 为它们提供了内置函数。同样,除非另有说明,否则这些函数在元素方面运行:
digamma() |
Psi 函数,lgamma() 函数的导数 |
erf() |
高斯误差函数,元素方式,一个张量 |
erfc() |
一个张量的互补误差函数 |
igamma() |
降低正则化的不完全伽玛函数 |
igammac() |
上正则化不完全伽马函数 |
lbeta() |
β函数绝对值的自然对数 |
lgamma() |
伽玛函数绝对值的自然对数 |
squared_difference() |
计算两个张量之间差异的平方 |
工作原理
重要的是要知道我们可以使用哪些函数,以便我们可以将它们添加到我们的计算图中。我们将主要关注前面的函数。我们还可以生成许多不同的自定义函数作为前面的组合,如下所示:
# Tangent function (tan(pi/4)=1)
print(sess.run(tf.tan(3.1416/4.)))
1.0
更多
如果我们希望向我们未在此处列出的图添加其他操作,我们必须从前面的函数创建自己的操作。以下是我们之前未使用的操作示例,我们可以将其添加到图中。我们选择使用以下代码添加自定义多项式函数3x^2 - x + 10
:
def custom_polynomial(value):
return tf.sub(3 * tf.square(value), value) + 10
print(sess.run(custom_polynomial(11)))
362