Theano 的 conv2d 和 max_pool_2d
在实现一个卷积神经网络(CNN)时,你会遇到两种不同的conv2d
操作:
还有一个最大池化的实现:
我想问的问题是:
- 这两种
conv2d
的实现有什么区别? 在
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]
的元素。