gpt4 book ai didi

tensorflow - 使用 Tensorflow 执行 matmul 时出现 ValueError

转载 作者:行者123 更新时间:2023-12-03 14:06:06 26 4
gpt4 key购买 nike

我是 TensorFlow 的初学者,我正在尝试将两个矩阵相乘,但我不断收到一个异常消息:

ValueError: Shapes TensorShape([Dimension(2)]) and TensorShape([Dimension(None), Dimension(None)]) must have the same rank

这是最小的示例代码:

data = np.array([0.1, 0.2])
x = tf.placeholder("float", shape=[2])
T1 = tf.Variable(tf.ones([2,2]))
l1 = tf.matmul(T1, x)
init = tf.initialize_all_variables()

with tf.Session() as sess:
sess.run(init)
sess.run(feed_dict={x: data}

令人困惑的是,以下非常相似的代码可以正常工作:

data = np.array([0.1, 0.2])
x = tf.placeholder("float", shape=[2])
T1 = tf.Variable(tf.ones([2,2]))
init = tf.initialize_all_variables()

with tf.Session() as sess:
sess.run(init)
sess.run(T1*x, feed_dict={x: data}

谁能指出问题所在?我必须在这里遗漏一些明显的东西..

最佳答案

tf.matmul() op 要求它的两个输入都是矩阵(即二维张量)*,并且不执行任何自动转换。您的 T1变量是一个矩阵,但你的 x placeholder 是一个长度为 2 的向量(即一维张量),它是错误的来源。

相比之下,*运算符( tf.multiply() 的别名)是广播元素乘法。它将按照 NumPy broadcasting rules 将向量参数转换为矩阵.

要使矩阵乘法工作,您可以要求 x是一个矩阵:

data = np.array([[0.1], [0.2]])
x = tf.placeholder(tf.float32, shape=[2, 1])
T1 = tf.Variable(tf.ones([2, 2]))
l1 = tf.matmul(T1, x)
init = tf.initialize_all_variables()

with tf.Session() as sess:
sess.run(init)
sess.run(l1, feed_dict={x: data})

...或者您可以使用 tf.expand_dims() 将向量转换为矩阵的操作:
data = np.array([0.1, 0.2])
x = tf.placeholder(tf.float32, shape=[2])
T1 = tf.Variable(tf.ones([2, 2]))
l1 = tf.matmul(T1, tf.expand_dims(x, 1))
init = tf.initialize_all_variables()

with tf.Session() as sess:
# ...

* 当我最初发布答案时确实如此,但现在 tf.matmul()还支持批量矩阵乘法。这要求两个参数至少有 2 个维度。见 the documentation更多细节。

关于tensorflow - 使用 Tensorflow 执行 matmul 时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34908033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com