一、问题
修改深度学习网络后,在进行张量拼接时提示错误:ValueError: (InvalidArgument) The 2-th dimension of input[0] and input[1] is expected to be equal.But received input[0]'s shape = [1, 64, 45, 60], input[1]'s shape = [1, 64, 44, 60].
[Hint: Expected inputs_dims[0][j] == inputs_dims[i][j], but received inputs_dims[0][j]:45 != inputs_dims[i][j]:44.] (at …\paddle/phi/kernels/funcs/concat_funcs.h:83)
二、问题分析
从错误信息来看,问题出在 paddle.concat 操作上。试图在维度 1 上连接两个张量,但它们在维度 2 上的大小不一致。这意味着输入的张量 L2_offset 和 L3_offset * 2 在高度上(第二个维度)有不同的大小,分别是 45 和 44。
三、解决办法
确保输入尺寸一致:在 paddle.concat 之前确保输入张量在所有非连接维度上具有相同的大小。
调整输入张量:根据需求,调整张量的大小使它们一致。
3.1 添加代码
下面代码解析:
裁剪或填充:在连接之前,确保两个张量在所有非连接维度上的大小相同。如果一个张量在某个维度上比另一个张量大,则裁剪到较小的大小。
连接操作:一旦两个张量具有相同的大小,就可以安全地使用 paddle.concat 进行连接。
import paddle
# 获取当前的高度和宽度
height_L2, width_L2 = L2_offset.shape[2], L2_offset.shape[3]
height_L3, width_L3 = L3_offset.shape[2], L3_offset.shape[3]
# 确保两个张量在高度和宽度上相同,可以裁剪或填充
if height_L2 > height_L3:
L2_offset = L2_offset[:, :, :height_L3, :]
elif height_L2 < height_L3:
L3_offset = L3_offset[:, :, :height_L2, :]
# 连接两个张量
L2_offset = paddle.concat([L2_offset, L3_offset * 2], axis=1)