解决 TensorFlow 中的 InvalidArgumentError: 矩阵大小不兼容
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_train 和 W 的矩阵形状不兼容。X_train 的形状为 [424,10],W 的形状为 [14,1],无法进行矩阵乘法运算。矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数。
解决方法:
- 修改
W的形状: 将W的形状改为[10,1]。这样X_train的列数(10)就等于W的行数(10),就可以进行矩阵乘法运算。 - 重新定义
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 错误。通过修改矩阵的形状或重新定义矩阵,可以解决这个问题。
原文地址: https://www.cveoy.top/t/topic/f1Uy 著作权归作者所有。请勿转载和采集!