huangleiBuaa / GroupWhitening

This project is the PyTorch implementation of our accepted CVPR 2021 paper, Group Whitening: Balancing Learning Efficiency and Representational Capacity
BSD 2-Clause "Simplified" License
9 stars 5 forks source link

sigma.svd()出现RuntimeError #2

Closed Chauncey-Wang closed 3 years ago

Chauncey-Wang commented 3 years ago

老哥,GroupWhitening/classification/extension/normalization/dbn.py里的 我把dbn.py加到自己的网络里,为什么会在 u, eig, _ = sigma.svd()这一句报出 RuntimeError: svd_cuda: the updating process of SBDSDC did not converge (error: 14) 这样的错误呀?

huangleiBuaa commented 3 years ago

@Chauncey-Wang ,这个是有可能出现数值不稳定的。是这样,dbn.py那个模块是我CVPR18年论文的方法,那个方法可以确保某层的每批activation是Whitened,如果你必须是需要这个性质来做一些理论的分析和验证,那你可以用它来做,主要的问题是它的数值不稳定,如果你需要每层都用它,非常有可能出现你刚才出现的这种情况(尤其是设置GroupSize>16时)。这个方法在实际使用中,当你BatchSize比较大时,或者在卷积网络中只替换前几层时(特征map比较大,相对而言用来计算)一般比较有效。 如果你仅仅是需要用一个可以提高你模型的模块的话(譬如,不一定需要某层activation一定是whitened这样的理论属性),我建议你用我CVPR19的那个IterNorm (那个数值很稳定,是白化算法的近似算法),当然你也可以尝试我这个项目中的GroupWhitening这个模块(尤其是你需要做目标检测和语义分割等任务时)。从实用角度来看,你可以可选地使用或者替换某些网络中的BN/GN层(如我论文中所写的)。

huangleiBuaa commented 3 years ago

answered