当前位置:网站首页>详细的np.matmul / np.dot / np.multiply / tf.matmul / tf.multiply / *

详细的np.matmul / np.dot / np.multiply / tf.matmul / tf.multiply / *

2022-08-09 10:43:00 模糊包

总结

关于numpytensor的内部数据乘积,主要是有以下相关函数可以操作。

  1. 通用函数:*
  2. numpy中函数:np.matmul/np.dot/np.multiply
  3. tensorflow中函数:tf.matmul/tf.multiply

一览表

操作/ 数据numpytensor
*按位元素相乘,返回array按位元素相乘,返回tensor
np.matmul(A,B)矩阵相乘操作,返回array<!!无法操作!!>
np.dot(A,B)点积,<内部操作意义不明>点积,<内部操作意义不明>
np.multiply(A,B)按位元素相乘,返回array按位元素相乘,返回tensor
tf.matmul(A,B)矩阵相乘操作,返回tensor矩阵相乘操作,返回tensor
tf.multiply(A,B)按位元素相乘,返回tensor按位元素相乘,返回tensor
  1. 通用函数可以对两种数据(tensor/array)进行按位元素相乘的操作,返回对应的数据格式(tensor返回tensor,array返回array)
  2. np.matmul可以对numpy数据矩阵相乘操作,返回array,对tensor数据无法操作; 特殊np.multiply可以对两种数据(tensor/array)均进行按位元素相乘的操作,返回对应的数据格式(tensor返回tensor,array返回array)
  3. tf.matmul(x,y)可以对两种数据(tensor/array)矩阵相乘操作,均生成tensortf.multiply可以对两种数据(tensor/array)均进行按位元素相乘的操作,均生成tensor

给定实验数据

# numpy数据
x = np.random.randn(2,3,4)*10  # 2, 3, 4
y = np.random.randn(2,4,3)*10  # 2, 4, 3
z = np.random.randn(2,3,4)*10  # 2, 3, 4
# tensorflow数据
x_ = tf.convert_to_tensor(x)  # 2, 3, 4
y_ = tf.convert_to_tensor(y)  # 2, 4, 3
z_ = tf.convert_to_tensor(z)  # 2, 3, 4

通用函数*

1.在tensor数据中,只能对shape相等的数据操作。是等效于tf.mul(x, z)函数的,也就是按位元素相乘,但是该api被废弃了,被tf.multiply(x_,z_)代替。
如下所示的结果

int:  x_*z_
out: <tf.Tensor 'mul_4:0' shape=(2, 3, 4) dtype=float64>

如果是x_*y_会报错,因为矩阵结构不对。
2. 在numpy的数据,只能对shape相等的数据操作,就是等效于np.multiply(x, z)函数的,也就是按位元素相乘

int: (x*z).shape
out: [2,3,4]
int: np.multiply(x,z).shape
out: [2,3,4]

如果是x*y会报错,因为矩阵结构不对。

numpy中的操作函数

1.np.matmul可以对numpy数据矩阵相乘操作,返回array
tensor数据无法操作的原因是,tensor只有在开启会话后才知道是什么具体内部信息。如下

# 对numpy数据操作
np.matmul(x,y)
array([[[ 135.00353387,   91.52903838, -171.80624465],
        [ -48.06257232,  226.70191293,  -99.31504134],
        [ -13.07481602,  -65.88699065, -285.02107715]],

       [[-418.64431827,  352.70885364,  386.94553585],
        [ 316.96375007,   80.67215049, -130.78989204],
        [-207.21033988,   47.25128822,   62.5329744 ]]])
## 对tensor操作,没有开启会话,shape不清晰无法操作。
np.matmul(x_,y_)
ValueError: matmul: Input operand 0 does not have enough dimensions 
(has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)

2.np.multiply可以对两种数据(tensor/array)均进行按位元素相乘的操作,返回对应的数据格式(tensor返回tensor,array返回array)

# 对numpy数据操作
np.multiply(x,z)
array([[[  13.2853443 ,   17.24155086,  -34.87846792,   38.32096247],
        [-170.15795371,  -32.70534678,   -5.48962254,  130.43221194],
        [  38.3870938 ,  150.13360364,   44.23867107,  -74.42425187]],

       [[ -91.30385223,   -6.00035432,    9.35122873,   21.70442799],
        [  36.825695  , -104.87642619,  -55.69509325,   89.90946649],
        [  52.98619734,   21.6885545 ,    2.57517183,   -2.36556962]]])

#对tensor操作
np.multiply(x_,z_)
<tf.Tensor 'mul_8:0' shape=(2, 3, 4) dtype=float64>

3.np.dot这是最神奇的操作,官方描述含义是点积,但是我没咋用过,就不写了,而且生产的值在三维以上后,会非常奇怪,奇怪在违反我们常见的数据变化。。其实这个函数是符合某个公式,大家想详细了解的可以去查。

tensorflow中的操作函数

1.tf.matmul(x,y)可以对numpy和tensor两种数据矩阵相乘操作 ,均生成tensor

tf.matmul(x,y)
<tf.Tensor 'MatMul_1:0' shape=(2, 3, 3) dtype=float64>

tf.matmul(x_,y_)
<tf.Tensor 'MatMul_4:0' shape=(2, 3, 3) dtype=float64>

2.tf.multiply(x,y)可以对numpy和tensor两种数据 按位元素相乘 操作,,均生成tensor

tf.multiply(x,z)
<tf.Tensor 'Mul_6:0' shape=(2, 3, 4) dtype=float64>

tf.multiply(x_,z_)
<tf.Tensor 'Mul_7:0' shape=(2, 3, 4) dtype=float64>
原网站

版权声明
本文为[模糊包]所创,转载请带上原文链接,感谢
https://blog.csdn.net/xinjieyuan/article/details/102368870