我在玩一些简单的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,但实际上是3d的。为什么?
发布于 2014-06-01 02:14:47
conv2d
的docstring表示,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)
因此,在默认情况下,如果您只传递一个过滤器,它将添加一个退化轴(可能是因为它在内部添加了这个轴到您的过滤器中,如果您自己没有这样传递它的话)。换句话说,它不跟踪输入形状以返回对应的内容。看起来比任何事情都更像是设计上的选择。)
https://stackoverflow.com/questions/23978598
复制相似问题