【发布时间】:2021-11-15 15:23:01
【问题描述】:
我在尝试训练我的 3D 密集网络时遇到了这样的错误。在卷积块的末尾有一个平均池化层。从下面的消息中可以看出,我的代码 out = F.adaptive_avg_pool3d(input=out, output_size=[1,1,1]) 没有给出正确大小的输出。
我尝试过使用output_size=1、output_size=(1,1,1) 并尝试使用层F.avg_pool,但都遇到了这样的错误。这很奇怪,因为我的输出确实有正确的大小。
附:我已将torch.nn.functional 导入为F
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
/tmp/ipykernel_37419/694291867.py in <module>
11 trainer = Trainer(model, device, optimizer, loss_fn)
12
---> 13 trainer.fit(N_EPOCHS, train_dataloader, val_dataloader, "4C", N_EPOCHS / 3, )
14
15 trainer.display_plots("4C")
/tmp/ipykernel_37419/579275755.py in fit(self, epochs, train_dataloader, valid_dataloader, mrimodule, patience)
26 self.info_message("EPOCH: {}", n_epoch)
27
---> 28 train_loss, train_auc, train_time = self.train_epoch(train_dataloader)
29 valid_loss, valid_auc, valid_time = self.valid_epoch(valid_dataloader)
30
/tmp/ipykernel_37419/579275755.py in train_epoch(self, train_dataloader)
71 Y = Y.to(self.device)
72 self.optimizer.zero_grad()
---> 73 pred = self.model(X).squeeze(1)
74 loss = self.loss_fn(pred, Y)
75
~/miniconda3/envs/MGMT_Classify/lib/python3.7/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
725 result = self._slow_forward(*input, **kwargs)
726 else:
--> 727 result = self.forward(*input, **kwargs)
728 for hook in itertools.chain(
729 _global_forward_hooks.values(),
~/MGMT_Classify_Scripts/DenseNet3D.py in forward(self, x)
216 features = self.features(x)
217 out = F.relu(features, inplace=True)
--> 218 out = F.adaptive_avg_pool3d(input=out, output_size=[1,1,1])
219 out = torch.flatten(out, 1)
220 out = self.classifier(out)
~/miniconda3/envs/MGMT_Classify/lib/python3.7/site-packages/torch/nn/functional.py in adaptive_avg_pool3d(input, output_size)
954 adaptive_avg_pool3d, (input,), input, output_size)
955 _output_size = _list_with_default(output_size, input.size())
--> 956 return torch._C._nn.adaptive_avg_pool3d(input, _output_size)
957
958
RuntimeError: adaptive_avg_pool3d: output_size must be 3
【问题讨论】:
-
你的输入形状是什么?
-
@Ivan 你好,我的输入是32*2*8*8,也就是(通道,Z,X,Y)。我刚刚将
torchvision.model.densenet中的Densenet121更改为3D。我已经通过使用这样的代码解决了这个错误:out = F.adaptive_avg_pool3d(input=out, output_size=(1, 1, 1)).view(features.size(0), -1)代替第 218、219 行中的原始代码(可以在主帖的错误消息中看到。虽然现在已经解决了,但我很好奇是什么到底会导致这个错误以及为什么可以这样解决。
标签: python deep-learning neural-network pytorch torch