如何在 Theano 中更改 CNN 中卷积层的大小
Posted
技术标签:
【中文标题】如何在 Theano 中更改 CNN 中卷积层的大小【英文标题】:How to change the size of convolutional layer in CNN in Theano 【发布时间】:2015-12-15 00:42:08 【问题描述】:我正在使用 Theano library 进行深度学习分类。在convolutional_mlp 代码中,它使用两个大小为(5,5)
的卷积层和(2,2)
的max_pool 层以及一个完全隐藏层,如下所示:
# 4D output tensor is thus of shape (batch_size, nkerns[0], 12, 12)
layer0 = LeNetConvPoolLayer(
rng,
input=layer0_input,
image_shape=(batch_size, 1, 28, 28),
filter_shape=(nkerns[0], 1, 5, 5),
poolsize=(2, 2)
)
# Construct the second convolutional pooling layer
# filtering reduces the image size to (12-5+1, 12-5+1) = (8, 8)
# maxpooling reduces this further to (8/2, 8/2) = (4, 4)
# 4D output tensor is thus of shape (batch_size, nkerns[1], 4, 4)
layer1 = LeNetConvPoolLayer(
rng,
input=layer0.output,
image_shape=(batch_size, nkerns[0], 12, 12),
filter_shape=(nkerns[1], nkerns[0], 5, 5),
poolsize=(2, 2)
)
# the HiddenLayer being fully-connected, it operates on 2D matrices of
# shape (batch_size, num_pixels) (i.e matrix of rasterized images).
# This will generate a matrix of shape (batch_size, nkerns[1] * 4 * 4),
# or (500, 50 * 4 * 4) = (500, 800) with the default values.
layer2_input = layer1.output.flatten(2)
layer2 = HiddenLayer(
rng,
input=layer2_input,
n_in=nkerns[1] * 4 * 4,
n_out=500,
activation=T.tanh
)
layer3 = LogisticRegression(input=layer2.output, n_in=500, n_out=35)`
问题是,如果我想将卷积层的大小从(5,5)
更改为(3,3)
,CNN 的架构会是什么?
【问题讨论】:
如果你能自己解决这个问题,也许在社区的帮助下,你会对 CNN 有更丰富的了解。如果您尝试找出答案,您是否可以编辑您的问题以包含您尝试过的内容以及它如何失败的详细信息。这样我们就可以将我们的答案用于澄清您的理解,而不是仅仅提供一些不透明的数字来回答问题,但不能帮助您理解正在发生的事情。 【参考方案1】:用 3*3 过滤器 2*2 池化 28*28 图像大小:
过滤将图像大小减小到(28-3+1, 28-3+1) = (26, 26)
并且池化将其进一步减少到(26/2, 26/2) = (13, 13)
用于第一个 CNN 层等等。
【讨论】:
下一步是什么? 13 为奇数,则为(13-3+1)=11
。现在11/2=?
; (5 or 6)
?
您现在可以使用 2*2 过滤器,这样新的大小将是 (13-2+1) =12 并且通过使用 2*2 池化我们得到 12/2 = 6 ( 6*6)图片。以上是关于如何在 Theano 中更改 CNN 中卷积层的大小的主要内容,如果未能解决你的问题,请参考以下文章