TensorFlow 中的 InvalidArgumentError: 矩阵大小不兼容

在 TensorFlow 中使用 tf.matmul 进行矩阵乘法时,如果矩阵的大小不兼容,就会出现 InvalidArgumentError: Matrix size-incompatible 错误。下面是代码示例和详细解释:

InvalidArgumentError                      Traceback (most recent call last)
Cell In[26], line 15
     11 for i in range(iter + 1):
     13     with tf.GradientTape() as tape:
---> 15         PRED_train = tf.matmul(X_train,W)
     17         Loss_train = 0.5 * tf.reduce_mean(tf.square(Y_train - PRED_train))
     19         PRED_test = tf.matmul(X_test,W)

File ~\AppData\Roaming\Python\Python39\site-packages\tensorflow\python\util\traceback_utils.py:153, in filter_traceback.<locals>.error_handler(*args, **kwargs)
    151 except Exception as e:
    152   filtered_tb = _process_traceback_frames(e.__traceback__)
--> 153   raise e.with_traceback(filtered_tb) from None
    154 finally:
    155   del filtered_tb

File ~\AppData\Roaming\Python\Python39\site-packages\tensorflow\python\framework\ops.py:7262, in raise_from_not_ok_status(e, name)
   7260 def raise_from_not_ok_status(e, name):
   7261   e.message += (' name: ' + name if name is not None else '')
-> 7262   raise core._status_to_exception(e) from None

InvalidArgumentError: {{function_node __wrapped__MatMul_device_/job:localhost/replica:0/task:0/device:CPU:0}} Matrix size-incompatible: In[0]: [424,10], In[1]: [14,1] [Op:MatMul]

错误原因:

第 15 行出错,因为 X_trainW 的矩阵形状不兼容。X_train 的形状为 [424,10]W 的形状为 [14,1],无法进行矩阵乘法运算。矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数。

解决方法:

  1. 修改 W 的形状:W 的形状改为 [10,1]。这样 X_train 的列数(10)就等于 W 的行数(10),就可以进行矩阵乘法运算。
  2. 重新定义 X_train 的形状:X_train 的形状改为 [14,10]。这样 W 的行数(14)就等于 X_train 的列数(10),就可以进行矩阵乘法运算。

选择哪种方法取决于你想要实现的功能以及数据的含义。

代码示例:

# 修改 W 的形状
W = tf.Variable(tf.random.normal([10, 1]))

# 或者重新定义 X_train 的形状
X_train = tf.reshape(X_train, [14, 10])

总结:

在使用 TensorFlow 进行矩阵乘法时,一定要注意矩阵的大小是否兼容,否则就会出现 InvalidArgumentError: Matrix size-incompatible 错误。通过修改矩阵的形状或重新定义矩阵,可以解决这个问题。

解决 TensorFlow 中的 InvalidArgumentError: 矩阵大小不兼容

原文地址: https://www.cveoy.top/t/topic/f1Uy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录