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