解决问题:ValueError: (InvalidArgument) The 2-th dimension of input[0] and input[1] is expected to be equ

一、问题

修改深度学习网络后,在进行张量拼接时提示错误: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)

猜你喜欢

转载自blog.csdn.net/qq_40280673/article/details/140869055