某些反卷积图层中的衍生物大多全为零

时间:2017-07-24 04:53:55

标签: caffe conv-neural-network deconvolution

这是一个非常奇怪的错误,部分是前一个问题(Deconvolution layer FCN initialization - loss drops too fast)的后续行动。

然而,我启动Deconv图层(双线性或高斯图),我得到相同的情况:

1)权重更新,我检查了多次迭代。反卷积/上采样图层的大小相同:(2,2,8,8)

首先,net_mcn.layers[idx].blobs[0].diff返回带有浮点数的矩阵,最后一个Deconv层(upscore5)生成两个具有相同数字且具有相反符号的数组,即权重应该以相同的速率运行方向,但最终的重量实际上几乎相同!

相当令人惊讶的是,剩下的四个deconv层没有这个错误。因此,当我比较模型时,例如,对于iter=5000iter=55000 deconv图层,权重是非常不同的。

更令人惊讶的是,其他层(卷积)的变化要小得多!

这是初始化打印输出的位,用于确认deconv层已更新:

I0724 03:10:30.451787 32249 net.cpp:198] loss needs backward computation.
I0724 03:10:30.451792 32249 net.cpp:198] score_final needs backward computation.
I0724 03:10:30.451797 32249 net.cpp:198] upscore5 needs backward computation.
I0724 03:10:30.451802 32249 net.cpp:198] upscore4 needs backward computation.
I0724 03:10:30.451804 32249 net.cpp:198] upscore3 needs backward computation.
I0724 03:10:30.451807 32249 net.cpp:198] upscore2 needs backward computation.
I0724 03:10:30.451810 32249 net.cpp:198] upscore needs backward computation.
I0724 03:10:30.451814 32249 net.cpp:198] score_fr3 needs backward computation.
I0724 03:10:30.451818 32249 net.cpp:198] score_fr2 needs backward computation.
I0724 03:10:30.451822 32249 net.cpp:198] score_fr needs backward computation.

2)对于反卷积图层,Blob差异全为零

几乎所有 deconv图层的数据流(Finding gradient of a Caffe conv-filter with regards to input)差异在算法的整个持续时间内都是零,只有少数例外(也像-2.28945263e-09那样接近0 )。

卷积层差异看起来不错。

我认为这是一个悖论 - deconv层中的权重被更新但是神经元的差异都是0(常数?)

3)Deconv功能快速增长

远大于FCN和CRFasRNN,高达5.4e + 03,同时附近的像素可以具有非常不同的值(例如5e + 02和-300),用于同一类。

4)培训和验证错误通常会很快下降

正如我在提到的问题中指出的那样。

所以把它们放在一起 - 我不明白该怎么做。如果它过度拟合,为什么验证错误也会减少呢?

网络的架构是

fc7->relu1->dropout->conv2048->conv1024->conv512->deconv1->deconv2->deconv3->deconv4->deconv5->crop->softmax_with_loss

编辑:我错了,并非所有net.blobs [...]中的所有条目.diffs都是0,但主要是因为图层变大。这取决于数据大小。

0 个答案:

没有答案