张量运算
加减乘除四则运算
| 算术操作 | 描述 |
|---|---|
tf.add(x,y) | 将x和y逐元素相加 |
tf.subtract(x,y) | 将x和y逐元素相减 |
tf.multiply(x,y) | 将x和y逐元素相乘 |
tf.divide(x,y) | 将x和y逐元素相除 |
tf.math.mod(x,y) | 将x逐元素求余 |
逐元素操作是指把x中的每一个元素与y中的每一个元素逐个地进行运算,但是实际上是可以用数学符号+-/*%去代替的。例:
# 逐元素相加
a = tf.constant([1, 2, 3])
b = tf.constant([4, 5, 6])
c = tf.add(a, b)
print(c)
# 逐元素相减
d = tf.subtract(b, a)
print(d)
# 逐元素相乘
e = tf.multiply(a, b)
print(e)
# 逐元素相除
f = tf.divide(a, b)
print(f)
# 逐元素求余
g = tf.math.mod(a, b)
print(g)
print(a - b)
print(a * b)
print(a / b)
print(a + b)
print(a % b)
print(a // b)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zyHu3yKI-1591275177630)(./img/26.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/2020060420531837.png)
需要注意的是/运算虽然除数与被除数的元素类型都是int32的,但是得到的结果却是float64,如果想要得到的运算是整除运算可以用//来进行整除运算。
幂指对数运算
| 算术运算 | 运算描述 |
|---|---|
tf.pow(x,y) | 对x求y的幂次方 |
tf.square(x) | 对x逐个元素求二次方 |
tf.sqrt(x) | 对x逐元素开平方根 |
tf.exp(x) | 计算e的x次方 |
tf.math.log(x) | 计算自然对数,底数为e |
a = tf.reshape(tf.range(6), shape=(2, 3))
print(tf.pow(a, 2))
print(a ** 2)
print(tf.square(a))
print(tf.sqrt(tf.cast(a, dtype=tf.float32)))
print(tf.cast(a, dtype=tf.float32) ** (1 / 2))
print(tf.math.log(tf.cast(a, dtype=tf.float32)))
print(tf.exp(tf.cast(a,dtype=tf.float32)))
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrDZwmaC-1591275177635)(./img/27.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/2020060420532746.png)
如上所示,对张量每个元素求平方或平方根也是可以用**这种数学符号的,但是需要注意的是在计算自然对数与求平方根时,张量的类型需要是浮点型,使用整型会报错。
由于TensorFlow中只有以e为底的自然对数,没有提供其它数值为底的对数运算函数,但是我们可以用数学运算中的换底公式来计算其它底数的对数,
l
o
g
a
b
=
l
o
g
c
b
l
o
g
c
a
log_a b = frac{log_c b}{log_c a}
logab=logcalogcb
其它运算
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iTtFX03l-1591275177638)(./img/28.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205354605.png)
三角函数与反三角函数运算
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feLVOoFU-1591275177644)(./img/29.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205400691.png)
重载运算符
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANK54SlQ-1591275177647)(./img/30.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205405954.png)
广播机制(broadcaing)
例如,一维张量与二维向量相加时,一维向量中每个元素会与二维向量中最小的那个维度中的每个元素逐个相加。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFBdN5yF-1591275177649)(./img/31.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/2020060420541178.png)
需要注意的是两个张量最后一个维度的长度必须相等。
a = tf.constant([1, 2, 3])
b = tf.reshape(tf.range(12), shape=(4, 3))
print(a + b)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JIhMRt2H-1591275177650)(./img/32.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205419727.png)
一维张量和三维张量的相加也与一维张量与二维张量相加的情况相同,都是最小维度之间各个元素相加。
数字+N维张量时,这个数字也会与张量的各个元素进行相加。
张量乘法
元素乘法:tf.multiply(),可以用*运算符代替,
向量乘法:tf.matmul(),可以用@运算符代替。向量乘法采用的乘法是线性代数中的矩阵之间相乘的运算。
a = tf.reshape(tf.range(6), shape=(2,3))
b = tf.reshape(tf.range(6), shape=(3,2))
print(a@b)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a8Zd83Vx-1591275177652)(./img/33.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205426497.png)
对于多维张量中的三维张量与三维常量普通乘法之间的运算遵循的原则是最后两位做向量乘法,高维采用广播机制(其实四维也是)。
一图说明:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTjcs61p-1591275177653)(./img/34.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205436377.png)
张量数据统计函数
求和函数:tf.reduce_sum(),这个函数可以设定axis参数,以此来指定对某个维度进行求和,如果不设置,就会默认对所有元素进行求和运算。
a = tf.reshape(tf.range(12),shape=(2,2,3))
print(tf.reduce_sum(a))
print(tf.reduce_sum(a,axis=2))
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJhvp4xK-1591275463511)(./img/35.png)]](https://file2.kaopuke.com:8081/files_image/2023061019/20200604205801327.png)
与之相似的还有tf.reduce_mean()求均值函数,tf.max()求最大值函数,tf.min()求最小值函数,tf.argmax()求最大值索引,tf.argmin()求最小值索引。
需要注意的是求均值函数在张量类型为整型时,所得到的均值张量也是整型。
最后
以上就是瘦瘦星月最近收集整理的关于TensorFlow学习——张量运算的全部内容,更多相关TensorFlow学习——张量运算内容请搜索靠谱客的其他文章。
发表评论 取消回复