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)

2 次元入力の 2 次元畳み込みの結果は 2 次元であると予想されますが、実際には 3 次元です。なんで?

4

1 に答える 1

2

say signal.conv.conv2dの docstring は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 に答える