Muh*_*hal 2 machine-learning conv-neural-network pytorch
我正在使用骰子损失来实现涉及超网络的全卷积网络(FCN)。该模型有两个输入和一个输出,即二进制分割图。模型正在更新权重,但损失是恒定的。它甚至没有过度拟合仅三个训练示例
我也使用了其他损失函数,如骰子+二元交叉熵损失、jacard 损失和 MSE 损失,但损失几乎是恒定的。我还尝试了几乎所有激活函数,例如 ReLU、LeakyReLU、Tanh。此外,我必须在输出处使用 sigmoid,因为我需要输出在 [0,1] 范围内,学习率为 0.01。此外,我还尝试了不同的学习率,例如 0.0001、0.001、0.1。无论训练开始时的损失是多少,它总是以这个值出现
这显示了三个训练示例的梯度。以及整体损失
tensor(0.0010, device='cuda:0')
tensor(0.1377, device='cuda:0')
tensor(0.1582, device='cuda:0')
Epoch 9, Overall loss = 0.9604763123724196, mIOU=0.019766070265581623
tensor(0.0014, device='cuda:0')
tensor(0.0898, device='cuda:0')
tensor(0.0455, device='cuda:0')
Epoch 10, Overall loss = 0.9616242945194244, mIOU=0.01919178702228237
tensor(0.0886, device='cuda:0')
tensor(0.2561, device='cuda:0')
tensor(0.0108, device='cuda:0')
Epoch 11, Overall loss = 0.960331304506822, mIOU=0.01983801422510155
Run Code Online (Sandbox Code Playgroud)
我预计损失会在几个时期内收敛。我应该怎么办?
这实际上并不是堆栈溢出的问题。有一百万件事可能是错误的,通常不可能发布足够的代码来让我们查明问题,即使是这样,也没有人愿意花那么多时间去阅读。
话虽这么说,有一些通常对我有用的一般准则。
torch.sigmoid(x)从网络返回,然后将其输入torch.nn.functional.binary_cross_entropy_with_logits(有效地应用sigmoid两次)。也许你的最后一层是ReLU,你的网络无法(通过构造)输出你期望的负值。最后,我个人从未使用骰子作为主要损失函数进行过成功的训练,所以我肯定会尝试首先使用交叉熵,然后再转向骰子。
| 归档时间: |
|
| 查看次数: |
29955 次 |
| 最近记录: |