Tensorflow二维、三维、四维矩阵运算(矩阵相乘,点乘,行/列累加)
<强> 1。矩阵相乘强>
根据矩阵相乘的匹配原则,左乘矩阵的列数要等于右乘矩阵的行数。
在多维(三维、四维)矩阵的相乘中,需要最后两维满足匹配原则。
可以将多维矩阵理解成:(矩阵排列,矩阵),即后两维为矩阵,前面的维度为矩阵的排列。
比如对于(2,2,4)来说,视为2个(2、4)矩阵。
对于(2,2,2,4)来说,视为2 * 2个(2、4)矩阵。
进口tensorflow特遣部队 a_2d=特遣部队。常数([1]* 6、形状=[2、3]) b_2d=特遣部队。常数([2]* 12,形状=[3,4]) c_2d=特遣部队。matmul (a_2d b_2d) a_3d=特遣部队。常数([1]* 12,形状=[2,2,3]) b_3d=特遣部队。常数([2]* 24、形状=(2、3、4)) c_3d=特遣部队。matmul (a_3d b_3d) a_4d=特遣部队。常数([1]* 24、形状=[2,2,2,3]) b_4d=特遣部队。常数([2]* 48、形状=(2,2,3,4)) c_4d=特遣部队。matmul (a_4d b_4d) 与tf.Session税(): .run tf.global_variables_initializer () () 打印(" # {}* {}={}\ n {}”。 格式(a_2d.eval ()。形状,b_2d.eval ()。形状,c_2d.eval ()。形状,c_2d.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(a_3d.eval ()。形状,b_3d.eval ()。形状,c_3d.eval ()。形状,c_3d.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(a_4d.eval ()。形状,b_4d.eval ()。形状,c_4d.eval ()。形状,c_4d.eval ()))
<强> 2。点乘强>
点乘指的是形状相同的两个矩阵,对应位置元素相乘,得到一个新的形状相同的矩阵。
a_2d=特遣部队。常数([1]* 6、形状=[2、3]) b_2d=特遣部队。常数([2]* 6、形状=[2、3]) c_2d=特遣部队。乘(a_2d b_2d) a_3d=特遣部队。常数([1]* 12,形状=[2,2,3]) b_3d=特遣部队。常数([2]* 12,形状=[2,2,3]) c_3d=特遣部队。乘(a_3d b_3d) a_4d=特遣部队。常数([1]* 24、形状=[2,2,2,3]) b_4d=特遣部队。常数([2]* 24、形状=[2,2,2,3]) c_4d=特遣部队。乘(a_4d b_4d) 与tf.Session税(): .run tf.global_variables_initializer () () 打印(" # {}* {}={}\ n {}”。 格式(a_2d.eval ()。形状,b_2d.eval ()。形状,c_2d.eval ()。形状,c_2d.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(a_3d.eval ()。形状,b_3d.eval ()。形状,c_3d.eval ()。形状,c_3d.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(a_4d.eval ()。形状,b_4d.eval ()。形状,c_4d.eval ()。形状,c_4d.eval ()))
另外,点乘的其中一方可以是一个常数,也可以是一个和矩阵行向量等长(即列数)的向量。
即
因为在点乘过程中,会自动将常数或者向量进行扩维。
a_2d=特遣部队。常数([1]* 6、形状=[2、3]) k=tf.constant (2) l=特遣部队。常数([2、3、4) b_2d_1=特遣部队。乘(k, a_2d) #特遣部队。乘(a_2d k)也是好的 b_2d_2=特遣部队。乘(l, a_2d) #特遣部队。乘(a_2d l)也是好的 a_3d=特遣部队。常数([1]* 12,形状=[2,2,3]) b_3d_1=特遣部队。乘(k, a_3d) #特遣部队。乘(a_3d k)也是好的 b_3d_2=特遣部队。乘(l, a_3d) #特遣部队。乘(a_3d l)也是好的 a_4d=特遣部队。常数([1]* 24、形状=[2,2,2,3]) b_4d_1=特遣部队。乘(k, a_4d) #特遣部队。乘(a_4d k)也是好的 b_4d_2=特遣部队。乘(l, a_4d) #特遣部队。乘(a_4d l)也是好的 与tf.Session税(): .run tf.global_variables_initializer () () 打印(" # {}* {}={}\ n {}”。 格式(k.eval ()。形状,a_2d.eval ()。形状,b_2d_1.eval ()。形状,b_2d_1.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(l.eval ()。形状,a_2d.eval ()。形状,b_2d_2.eval ()。形状,b_2d_2.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(k.eval ()。形状,a_3d.eval ()。形状,b_3d_1.eval ()。形状,b_3d_1.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(l.eval ()。形状,a_3d.eval ()。形状,b_3d_2.eval ()。形状,b_3d_2.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(k.eval ()。形状,a_4d.eval ()。形状,b_4d_1.eval ()。形状,b_4d_1.eval ())) 打印(" # {}* {}={}\ n {}”。 格式(l.eval ()。形状,a_4d.eval ()。形状,b_4d_2.eval ()。形状,b_4d_2.eval ()))Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)