PyTorch ResNet 实现的训练损失随着每个 Epoch 的增加而增加

PyTorch ResNet implementation's Training Loss increasing with every Epoch

提问人:Gamma-ray-burst 提问时间:11/3/2023 更新时间:11/3/2023 访问量:22

问:

我正在使用 PyTorch 从头开始实现 ResNet 网络。这个网络对我的要求是独一无二的,因为我需要对具有 14 个不同通道和尺寸为 8x8 像素的卫星影像执行图像分类

然而,我的问题是,在训练过程中,训练损失在第一个 epoch 之后开始大量增加,然后在 10 个 epoch 内达到无穷大,我的准确率停留在 0.17。

以下是我的处理流程和 ResNet 架构:

  1. 我使用双三次插值将 8x8 维图像重塑为 64x64。

  2. 我将此图像传递到具有 256 个输出通道、内核大小为 3 和步幅为 2 的初始 Conv2d 层,以将图像尺寸大约减半,同时增加其通道。

  3. 接下来,上一个输出将通过残差瓶颈块。该残差块包括:

    a. 具有步幅 1 的 1x1 内核的 Conv2d 层,具有 128 个过滤器

    b. 具有 3x3 内核的 Conv2d 层,具有步幅 1、填充 1 和 128 个过滤器

    c. 具有 1x1 内核的 Conv2d 层,步幅为 1,具有 256 个过滤器

    在这些 Conv2d 层之间,我有 ReLU + 批量归一化层。在其末尾,残差块具有 p 值为 0.1 的 Dropout 层。 此残差块的输出将添加到步骤 2 的输出中。

  4. 步骤 3 的输出现在通过上面定义的相同残差瓶颈块 - 但是,在求和发生之前,我使用 Conv2d 层调整了该块的输出和步骤 3 的输出的大小

    Conv2d 层将图像的尺寸减半,同时使用步幅 2 的 1x1 内核将通道数增加一倍,达到 512 个。一旦它们都通过这个 conv2d 块调整大小,它们就会被汇总。

  5. 步骤 4 的输出通过一个新的残差块传递 - 该块具有以下维度:

    a. 具有 stride 1 的 1x1 内核的 Conv2d 层,具有 256 个筛选器

    b. 具有 3x3 内核的 Conv2d 层,步幅为 1,填充 1 和 256 个过滤器

    c. 具有 1x1 内核的 Conv2d 层,步幅为 1,具有 512 个过滤器

    在这些 Conv2d 层之间,我有 ReLU + 批量归一化层。在其末尾,该残差块具有 p 值为 0.1 的 Dropout 层。 此残差块的输出将添加到步骤 4 的输出中。

  6. 最后,我将其传递到一个 Flattening 层和 2 个全连接层,它们之间有一个 ReLU 层。最后一层输出类概率。

我的训练数据包括 7 个不同类的 588 张训练图像。我知道一个包含 588 张图像的数据集非常小 - 但我想确认我的模型没有被训练的确切原因。它只是数据集本身的大小吗?还是我的架构本身有问题?如果需要,我也可以发布我的代码。

深度学习 PyTorch 训练-Data ResNet

评论


答: 暂无答案