Deep learning 在caffe中使用两个损耗时的奇怪损耗模式

Deep learning 在caffe中使用两个损耗时的奇怪损耗模式,deep-learning,caffe,conv-neural-network,Deep Learning,Caffe,Conv Neural Network,我在caffe培训CNN,并收到以下奇怪的损失模式: I0425 16:38:58.305482 23335 solver.cpp:398] Test net output #0: loss = nan (* 1 = nan loss) I0425 16:38:58.305524 23335 solver.cpp:398] Test net output #1: loss_intermediate = inf (* 1 = inf loss) I0425 16:38:59.235

我在caffe培训CNN,并收到以下奇怪的损失模式:

I0425 16:38:58.305482 23335 solver.cpp:398]     Test net output #0: loss = nan (* 1 = nan loss)
I0425 16:38:58.305524 23335 solver.cpp:398]     Test net output #1: loss_intermediate = inf (* 1 = inf loss)
I0425 16:38:59.235857 23335 solver.cpp:219] Iteration 0 (-4.2039e-45 iter/s, 20.0094s/50 iters), loss = 18284.4
I0425 16:38:59.235926 23335 solver.cpp:238]     Train net output #0: loss = 18274.9 (* 1 = 18274.9 loss)
I0425 16:38:59.235942 23335 solver.cpp:238]     Train net output #1: loss_intermediate = 9.46859 (* 1 = 9.46859 loss)
I0425 16:38:59.235955 23335 sgd_solver.cpp:105] Iteration 0, lr = 1e-06
I0425 16:39:39.330327 23335 solver.cpp:219] Iteration 50 (1.24704 iter/s, 40.0948s/50 iters), loss = 121737
I0425 16:39:39.330410 23335 solver.cpp:238]     Train net output #0: loss = 569.695 (* 1 = 569.695 loss)
I0425 16:39:39.330425 23335 solver.cpp:238]     Train net output #1: loss_intermediate = 121168 (* 1 = 121168 loss)
I0425 16:39:39.330433 23335 sgd_solver.cpp:105] Iteration 50, lr = 1e-06
I0425 16:40:19.372197 23335 solver.cpp:219] Iteration 100 (1.24868 iter/s, 40.0421s/50 iters), loss = 34088.4
I0425 16:40:19.372268 23335 solver.cpp:238]     Train net output #0: loss = 369.577 (* 1 = 369.577 loss)
I0425 16:40:19.372283 23335 solver.cpp:238]     Train net output #1: loss_intermediate = 33718.8 (* 1 = 33718.8 loss)
I0425 16:40:19.372292 23335 sgd_solver.cpp:105] Iteration 100, lr = 1e-06
I0425 16:40:59.501541 23335 solver.cpp:219] Iteration 150 (1.24596 iter/s, 40.1297s/50 iters), loss = 21599.6
I0425 16:40:59.501606 23335 solver.cpp:238]     Train net output #0: loss = 478.262 (* 1 = 478.262 loss)
I0425 16:40:59.501621 23335 solver.cpp:238]     Train net output #1: loss_intermediate = 21121.3 (* 1 = 21121.3 loss)
...
I0425 17:09:01.895849 23335 solver.cpp:219] Iteration 2200 (1.24823 iter/s, 40.0568s/50 iters), loss = 581.874
I0425 17:09:01.895912 23335 solver.cpp:238]     Train net output #0: loss = 532.049 (* 1 = 532.049 loss)
I0425 17:09:01.895926 23335 solver.cpp:238]     Train net output #1: loss_intermediate = 49.8377 (* 1 = 49.8377 loss)
I0425 17:09:01.895936 23335 sgd_solver.cpp:105] Iteration 2200, lr = 1e-06
仅供参考:我的网络基本上由两个阶段组成,因此我有两个损失。第一级可视为粗级,第二级为粗级的上采样级

我的问题是:这是一种典型的损失模式吗?首先,在第一次迭代中,损耗值较高,中间损耗较低,然后在下一次迭代中基本上会发生变化,因此损耗较低,中间损耗较高。最后,只有中间损失会收敛。

典型”并不是一个真正适用的术语。有如此多的模型和拓扑,你可以找到许多奇怪的损失进展的例子

在你的情况下,中间损失很可能一开始就很低,因为它“还不知道什么更好”。当后一层经过足够的训练,能够向中间层提供可靠的反馈时,它就开始学习足够的知识,从而产生严重的错误

最终损失计算与地面真实情况直接相关;它从第一次迭代中学习,因此它有一个从高损耗到低损耗的更容易理解的过程。

“典型”并不是一个真正适用的术语。有如此多的模型和拓扑,你可以找到许多奇怪的损失进展的例子

在你的情况下,中间损失很可能一开始就很低,因为它“还不知道什么更好”。当后一层经过足够的训练,能够向中间层提供可靠的反馈时,它就开始学习足够的知识,从而产生严重的错误


最终损失计算与地面真实情况直接相关;它从第一次迭代中学习,因此从高损耗到低损耗的过程更容易理解。

您使用的是BatchNorm层吗?是的!但是我确实在训练时设置了
global_stats
false,在测试@Shai时设置了true。也许我应该先训练第一个网络阶段,然后将第一阶段的所有lr_参数设置为0。你在使用BatchNorm层吗?是的!但是我确实在训练时设置了
global_stats
false,在测试@Shai时设置了true,也许我应该首先训练第一个网络阶段,然后将第一阶段的所有lr_参数设置为0。