如何在MXNet中使用channel Dropout (Dropout2d)

在很多实际使用场景下,特别是语义分割等输出像素级预测结果的全卷积神经网络中,经常会使用到随机drop特征图维度的操作。在Pytorch中,可以直接使用torch.nn.Dropout2d实现相应功能。然而在MXNet中可能略显麻烦。

查阅MXNet文档并不能直接找到所需的信息,因为Dropout模块被定义为了最基础版本的、随机drop数组中任意元素的功能。唯一可能与需求相关的参数’axes’,其定义过于晦涩,无法理解。
如何在MXNet中使用channel Dropout (Dropout2d)_第1张图片

而在更加“友好”的Gluon文档中,对应模块的解释仍然令人费解。简单查阅文档后仍不知道如何设置该参数。
如何在MXNet中使用channel Dropout (Dropout2d)_第2张图片

为了实现drop某个channel的功能,当输入特征为4维的时候(NxCxHxW),mx.sym.Dropout应该这样使用:

import mxnet as mx
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]).reshape([2,2,2,2])
b=mx.sym.Variable('b')
ctx=mx.cpu()
d=mx.sym.Dropout(p=0.1, axes=(0,2,3))
e=d.simple_binc(ctx, b=a.shape)
e.forward(is_train=True, b=a)

此时输出结果为

[
[[[[ 0.  0.]
   [ 0.  0.]]
  [[10. 12.]
   [14. 16.]]]
[[[[ 0.  0.]
   [ 0.  0.]]
  [[10. 12.]
   [14. 16.]]]]

可以多执行几次forward函数,从而验证结果。此时该Dropout满足了所需功能。

你可能感兴趣的:(细节)