为什么MXnet中的卷积函数具有内核参数

时间:2018-08-06 09:36:46

标签: python mxnet

我是mxnet的新手,在官方文档中,卷积层的生成可能是

conv = nd.Convolution(data=data, weight=W, bias=b, kernel=(3,3), num_filter=10)

但是要求weight参数需要采用4维张量

W = [weight_num, stride, kernel_height, kernel_width]

那么为什么我们仍然需要在kernel函数中设置一个Convolution参数?

1 个答案:

答案 0 :(得分:1)

kernel参数设置内核大小,可以是:

  • (width,)-用于一维卷积
  • (高度,宽度)-用于2D卷积
  • (深度,高度,宽度)-用于3D卷积

它仅定义形状。

weightbias参数包含将要训练的实际参数。实际值将在此处。

虽然您可能可以通过提供的kernel来找出weight(形状),但要求提供显式提供kernel的形状而不是尝试根据传递的参数来确定形状,这更具防御性到weight

以下是2D卷积的示例:

# shape is batch_size x channels x height x width
x = mx.nd.random.uniform(shape=(100, 1, 9, 9))
# kernel is just 3 x 3, 
# weight is num_filter x channels x kernel_height x kernel_width
# bias is num_filter
mx.nd.Convolution(data=x, 
                  kernel=(3, 3), 
                  num_filter=5, 
                  weight=mx.nd.random.uniform(shape=(5, 1, 3, 3)), 
                  bias=mx.nd.random.uniform(shape=(5,)))

解释1D,2D或3D卷积情况下各种参数形状的文档非常好:https://mxnet.incubator.apache.org/api/python/ndarray/ndarray.html#mxnet.ndarray.Convolution