为什么theano conv2d会添加空白维度?

时间:2014-06-01 09:50:56

标签: python numpy scipy theano

我正在玩一些简单的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。为什么呢?

1 个答案:

答案 0 :(得分: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个过滤器,它会添加一个退化轴(可能是因为如果你自己没有以这种方式传递它,它会在你的过滤器内部添加这个轴。换句话说,它不会不要跟踪输入的形状,以便返回相应的东西。看起来更像是一种设计选择。)