我正在尝试实施和训练original U-Net model,但是当我尝试使用ISBI Challenge Dataset训练模型时会陷入困境。
根据原始的U-Net模型,网络输出具有2个通道且大小为388 x 388的图像。因此,我用于训练的数据加载器生成了张量为 [batch,channel = 1,用于输入图像的width = 572,height = 572] 和用于目标/输出图像的 [批处理,通道= 2,width = 388,width = 388] 。
我的问题实际上是,当我尝试使用nn.CrossEntropyLoss()时,会引发以下错误:
RuntimeError:无效参数3:仅支持成批的空间目标(3D张量),但尺寸目标为:4,位于/ opt / conda / conda-bld / pytorch_1556653099582 / work / aten / src / THNN / generic / SpatialClassNLLCriterion。 c:59
我只是从PyTorch(这里是新手)开始……所以,如果有人可以帮助我克服这个问题,我将不胜感激。
源代码可在GitHub上获得:
https://github.com/dalifreire/cnn_unet_pytorch https://github.com/dalifreire/cnn_unet_pytorch/blob/master/unet_pytorch.ipynb
最诚挚的问候!
答案 0 :(得分:0)
来自PyTorch的CrossEntropyLoss文档字符串:
Shape:
- Input: :math:`(N, C)` where `C = number of classes`, or
:math:`(N, C, d_1, d_2, ..., d_K)` with :math:`K \geq 1`
in the case of `K`-dimensional loss.
- Target: :math:`(N)` where each value is :math:`0 \leq \text{targets}[i] \leq C-1`, or
:math:`(N, d_1, d_2, ..., d_K)` with :math:`K \geq 1` in the case of
K-dimensional loss.
- Output: scalar.
If :attr:`reduction` is ``'none'``, then the same size as the target:
:math:`(N)`, or
:math:`(N, d_1, d_2, ..., d_K)` with :math:`K \geq 1` in the case
of K-dimensional loss.
如果目标已经包含类索引,则应删除通道维。