编辑:该问题是我的粗心大意,而不是结构不正确。或更确切地说,该结构是不正确的,但仅是由于某种错字。我在输出层之前的每一层上都使用了ReLU激活,但是我也对池化层的输入上分别进行了ReLU激活。所以我每次都做两次ReLU。我仍然对模型有疑问,但是至少我得到的输出是变化的。
我在PyTorch中建立了一个全卷积神经网络,在训练模型后获得结果时遇到了一些麻烦。现在,训练部分还不是很完美,但是现在它将大大减少损失,使我的结果至少看起来像这样。但是,当我根据训练数据进行测试预测时,每个样本的结果都是相同的。
要稍微了解一下目的和结构,输入数据是图像,结果应为单个值(回归)。如前所述,它是完全卷积的,结构是Conv / ReLU> pooling 3次,然后最后一层只是1x1x1 conv,没有激活。损失函数是均方误差,我正在使用SGD作为优化器。
我的代码有点长,有点丑陋,我不确定是哪个特定部分导致了错误。因此,目前我不会在此处发布任何内容,但是如果某人对一般罪魁祸首有直觉,则可以发布任何要求的部分。
我只是希望这是一个问题,可以使经验丰富的人员快速了解错误地设置了什么总体结构。在我看来,这很可能是网络本身,因为正如我说的那样,它看起来可以很好地训练,但是无论输入图像如何,输出始终是相同的单个浮点数。也许是激活功能(或最后一层缺少激活功能)?还是实际上是培训步骤,而我正在做一些事情弄乱最终结果?我应该注意,最后一层的权重值似乎是每个预测的值。
输入被标准化(即减去均值并用stddev除以每个图像),而目标只是减去均值并且在-1到1的范围内(原始值为0到1)。