我有一个脚本,我正在尝试将我的数学运算从NumPy操作转换为TensorFlow操作,因此它可以在GPU上更快。在我的脚本中,我最终遇到了一个形状为数组的数组(260),需要与另一个形状为(260)的数组进行矩阵乘法,如下所示:
import numpy as np
x = np.array([2] * 260)
y = np.array([4] * 260)
r = np.matmul(x,y) #np.dot(x,y) also works
print(r) #2080
但TensorFlow中的相同操作是不可能的。
import tensorflow as tf
x = tf.Variable([2] * 260)
y = tf.Variable([4] * 260)
r = tf.matmul(x,y)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
result = sess.run(r)
print(result) # ERRROR
TensorFlow错误说:
ValueError:Shape必须是等级2,但对于' MatMul'是等级1 (OP: ' MatMul')输入形状:[260],[260]。
我试图通过无数种方式重塑输入,但这些方法都没有用,例如:x = tf.expand_dims(x,1)
。
答案 0 :(得分:2)
由于两个输入都是1维的,因此矩阵乘法是内积,
tf.reduce_sum(tf.multiply(x, y))
或
tf.tensordot(x, y, 1)
另请参阅this answer了解计算内积的几种替代方法。