1

我正在玩一些简单的 Theano 代码,我遇到了以下问题:

import numpy
import theano
from theano import tensor
from theano.tensor.signal.conv import conv2d

m = tensor.fmatrix()
w = numpy.ones([10,1], dtype=numpy.float32)
c = conv2d(m,w)
f = theano.function([m], c)
print f(numpy.ones([100,100], dtype=numpy.float32)).shape

结果:(1、91、100)

2d 输入的 2d 卷积的结果预计是 2d,但实际上是 3d。为什么?

4

1 回答 1

2

conv2d说signal.conv.conv2d的文档字符串执行输入与给定过滤器的基本 2D 卷积。(注意复数)

你可以给它传递几个过滤器,它会返回所有这些的卷积。试试例如

c = conv2d(m,np.array([w, w, w]))
f = theano.function([m], c)
print f(numpy.ones([100,100], dtype=numpy.float32)).shape  # outputs (3, 91, 100)

因此,默认情况下,如果您只通过 1 个过滤器,它似乎会添加一个退化轴(可能是因为如果您自己没有以这种方式通过它,它会在内部将此轴添加到您的过滤器。换句话说,它不会保留跟踪输入形状以返回对应的东西。看起来比其他任何东西都更像是一种设计选择。)

于 2014-06-01T10:14:47.000 回答