如何使用PyTorch训练原始的U-Net模型?

时间:2019-06-26 01:41:39

标签: python conv-neural-network pytorch image-segmentation

我正在尝试实施和训练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

最诚挚的问候!

1 个答案:

答案 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.

如果目标已经包含类索引,则应删除通道维。

Source