TensorFlow中4D张量A^T.A相乘报错的解决方法
解决TensorFlow中转置与自身乘积的维度不兼容问题
错误原因
你的Tensor A形状为[1000,24,24,2],直接用tf.transpose(A)会反转所有维度,得到形状[2,24,24,1000]的张量B。而tf.matmul处理高维张量时执行批量矩阵乘法,要求除最后两个矩阵维度外,前面的所有批量维度必须完全匹配。此时B的前两个维度是[2,24],A的前两个维度是[1000,24],维度不兼容,因此报错。
解决方案(根据需求二选一)
需求1:对每个样本单独计算A^T·A
如果1000是批量大小,每个样本是24×24×2的张量,需要对每个样本单独计算转置乘积,最终得到[1000,2,2]的结果:
# 将每个样本的空间维度(24×24)展平为一维 A_flat = tf.reshape(A, [1000, 24*24, 2]) # 仅转置每个样本的最后两个维度(保持批量维度不变) A_flat_T = tf.transpose(A_flat, perm=[0, 2, 1]) # 批量矩阵乘法,得到每个样本的转置乘积 C = tf.matmul(A_flat_T, A_flat)
需求2:将整个张量视为单个大矩阵计算A^T·A
如果需要把所有1000个样本的所有元素合并成一个大矩阵,计算全局的转置乘积,最终得到[2,2]的结果:
# 将前三个维度合并为一个维度,得到形状[1000×24×24, 2]的大矩阵 A_full_flat = tf.reshape(A, [-1, 2]) # 转置大矩阵,得到形状[2, 1000×24×24] A_full_flat_T = tf.transpose(A_full_flat) # 矩阵乘法得到全局转置乘积 C = tf.matmul(A_full_flat_T, A_full_flat)
内容的提问来源于stack exchange,提问作者Diego Solis
相关产品推荐
相关产品推荐

