Theano 的 conv2d 和 max_pool_2d

3 投票
1 回答
5458 浏览
提问于 2025-04-18 16:13

在实现一个卷积神经网络(CNN)时,你会遇到两种不同的conv2d操作:

还有一个最大池化的实现:

我想问的问题是:

  1. 这两种conv2d的实现有什么区别?
  2. conv2d中使用subsample参数和在conv2d之后应用max_pool_2d的下采样有什么不同?
    也就是说,以下两者有什么区别:

    conv2d( ..., subsample=(2,2) ) 
    

    a = conv2d( ..., subsample = (1,1) )
    max_pool_2d( a, ds = (2,2) )
    

1 个回答

7

关于你第一个问题的回答,这里是Theano文档中相关的部分

有两种类似的实现方式用于conv2d:

signal.conv2d and nnet.conv2d.

第一种实现的是传统的二维卷积,而第二种实现的是卷积神经网络中的卷积层(在这里,过滤器是三维的,并且可以处理多个输入通道)。

实际上,它们调用的是同一个函数,所以唯一的区别就是用户界面。

关于你第二个问题,结果是不同的。等价的调用是:

conv2(..., subsample=(2,2))

将会是:

conv2d(...,subsample=(1,1))[:,:,::2,::2]

换句话说,conv2d并不是在整个池化区域中取最大值,而是取池化区域中索引为[0,0]的元素。

撰写回答