医学图像配准代码报错AttributeError: 'int'对象无dim属性的解决方法
解决PyTorch中
AttributeError: 'int' object has no attribute 'dim'问题 运行医学图像配准代码时,在forward_part1函数的xa = F.pad(xa, pad=pad_tuple, mode='constant', value=pad_value)行触发以下错误:AttributeError: 'int' object has no attribute 'dim'
报错代码片段
def forward_part1(self, x, xa, u): B, D, H, W, C = x.shape window_size = get_window_size((D, H, W), self.window_size) x = self.norm1(x) # Pad feature maps to multiples of window size pad_l = pad_t = pad_d0 = 0 pad_d1 = (window_size[0] - D % window_size[0]) % window_size[0] pad_b = (window_size[1] - H % window_size[1]) % window_size[1] pad_r = (window_size[2] - W % window_size[2]) % window_size[2] # Pad the input tensors x = F.pad(x, (0, 0, pad_l, pad_r, pad_t, pad_b, pad_d0, pad_d1)) pad_value = 0 pad_tuple = tuple(map(int, (pad_l, pad_r, pad_t, pad_b, pad_d0, pad_d1, 0, 0))) xa = F.pad(xa, pad=pad_tuple, mode='constant', value=pad_value) # ...后续代码
报错回溯信息
Traceback (most recent call last): File "/home/ubuntu/Anwar/halfimagesize/changing crossattention,XMorpher/XMorpher/Unsup_train.py", line 149, in <module> RSTNet.train() ... File "/home/ubuntu/anaconda3/envs/Anwar/lib/python3.9/site-packages/torch/nn/functional.py", line 4172, in _pad assert len(pad) // 2 <= input.dim(), "Padding length too large" AttributeError: 'int' object has no attribute 'dim'
问题分析
报错根源是调用F.pad时,传入的xa参数是整数类型,而非PyTorch张量(Tensor)。F.pad需要对张量进行维度判断(调用input.dim()),整数没有该方法,因此触发错误。
解决方法
- 检查
forward_part1的调用链路,确认传入的xa是否为合法的PyTorch张量,排查是否在前置代码中被错误赋值为整数。 - 在出错行前添加调试代码,打印
xa的类型和值:
运行后根据输出定位print("xa type:", type(xa), "xa value:", xa) xa = F.pad(xa, pad=pad_tuple, mode='constant', value=pad_value)xa变为整数的具体环节。 - 验证
xa的维度匹配性:代码中x是5维张量(B,D,H,W,C),需确保xa的维度与x一致,避免因维度不匹配导致的张量被错误降维为标量。 - 修正padding参数长度:观察代码中
x的padding参数为8个值(对应5维张量的后4个维度+通道维度的padding),而pad_tuple额外添加了0,0,需确认是否符合xa的维度要求,避免因padding参数长度不匹配引发的间接错误。
内容的提问来源于stack exchange,提问作者Muhammad Anwar
相关产品推荐
相关产品推荐

