我在玩一些简单的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。为什么?
的文档字符串conv2d
说signal.conv.conv2d执行与给定了输入的基本二维卷积滤波器。(请注意复数)
您可以通过几个过滤器,它将返回所有这些的卷积。尝试例如
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个滤镜,它将添加一个简并轴(可能是因为,如果您自己不以这种方式通过滤镜,则它将在内部将该轴添加到滤镜中。换句话说,它不会保持跟踪输入形状以便返回对应的内容。看起来比其他任何选择都更像是一种设计选择。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句