CNN:为什么图像矩阵转换为(通道,宽度,高度)?

时间:2018-02-13 16:38:48

标签: machine-learning neural-network conv-neural-network convolution mxnet

我正在阅读一些CNN文章。我看到他们将输入图像转换为(channel, width, height)

取自MXNET CNN Tutorial的代码示例。

def transform(data, label):
  # 2,0,1 means channels,width, height
  return nd.transpose(data.astype(np.float32), (2,0,1))/255, label.astype(np.float32)

任何人都可以解释我们为什么要进行这种转变?

1 个答案:

答案 0 :(得分:2)

二维卷积有多种图像格式,主要是:

  • 频道优先NCHW格式,即(batch, channels, height, width)
  • 频道最后NHWC格式,即(batch, height, width, channels)

它们基本上是等效的,并且可以很容易地从一个转换为另一个,尽管有证据表明某些低级实现在使用特定数据格式时执行效率更高(参见this question)。

计算引擎通常接受这两种格式,但具有不同的默认值,例如

  • Tensorflow accepts both并默认使用NHWC
  • Theano acceptsNCHW格式。
  • Keras也适用于两者,并且有dedicated setting。最新版本默认使用NHWC
  • MXNet accepts both formats,但默认为NCHW

      

    默认数据布局为NCHW,即(batch_size, channel, height, width)。我们可以选择其他布局,例如NHWC

这个默认值几乎是重塑张量的唯一原因,只是为了避免网络中的layout参数。