TensorFlow MatMul报错求助:形状应为2阶但实际为1阶
解决TensorFlow矩阵乘法形状不匹配的问题
嘿,我来帮你搞定这个报错~你遇到的ValueError是因为矩阵乘法要求输入都是二维张量,而你定义的x是一维的(形状是[2]),和w1的[2,3]形状不匹配,所以tf.matmul没法执行。
错误原因拆解
TensorFlow的tf.matmul遵循标准矩阵乘法规则:第一个张量的列数必须等于第二个张量的行数。你的x是一个一维数组,相当于只有一行但没有明确的行维度,而w1是2行3列的二维矩阵,两者没法直接做乘法。
两种修改方案
方案1:直接把x定义为二维常量
把x = tf.constant([0.7,0.9])改成x = tf.constant([[0.7,0.9]]),这样x的形状就变成了[1,2](1行2列的行向量),就能和w1的[2,3]匹配了。
修改后的完整代码:
import tensorflow as tf w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2 = tf.Variable(tf.random_normal([3,3],stddev=1,seed=1)) # 定义为二维行向量 x = tf.constant([[0.7,0.9]]) a = tf.matmul(x, w1) y = tf.matmul(a, w2) sess = tf.Session() sess.run(w1.initializer) sess.run(w2.initializer) print(sess.run(y)) sess.close()
方案2:用tf.expand_dims给x增加维度
如果不想修改x的初始定义,可以用tf.expand_dims给x添加一个行维度,把一维张量转成二维:
import tensorflow as tf w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2 = tf.Variable(tf.random_normal([3,3],stddev=1,seed=1)) x = tf.constant([0.7,0.9]) # 增加第0维度,把形状从[2]变成[1,2] x = tf.expand_dims(x, 0) a = tf.matmul(x, w1) y = tf.matmul(a, w2) sess = tf.Session() sess.run(w1.initializer) sess.run(w2.initializer) print(sess.run(y)) sess.close()
运行任意一种修改后的代码,就能得到正确的输出啦~
内容的提问来源于stack exchange,提问作者馮推宇
相关产品推荐
相关产品推荐

