chainer.functions.
deconvolution_2d
(x, W, b=None, stride=1,
pad=0, outsize=None)[source]¶
二次元 Deconvolution関数。.
これは二次元Deconvolutionの実装です。大半のディープラーニングのフレームワークや論文で、この関数は transposed convolution(転置畳み込み)と呼ばれています。 しかし、歴史的な理由と (例えば Zillerの論文 Deconvolutional Networks) と後方互換製のために 、Chainerではこの関数を deconvolution と呼びます。
この関数は3つの変数(variable)をとります。すなわち、入力画像x
、 フィルター荷重 W
、そしてバイアスベクター b
です。
表記法: これは次元の表記法です。
\((s_Y, s_X)\) をフィルター適用のストライド(適用間隔)とします。そして、出力サイズ \((h_O, w_O)\) は 下記の等式によって推定されます。
この関数の出力はcuDNNを使用する場合非決定論的になることがあります。chainer.configuration.config.deterministic
が True
、かつ cuDNN version >= v3の場合は、cuDNN が決定的アルゴリズムを使用するように強制します。
deterministic
引数はv2以降サポートされていません。替わりに、chainer.using_config('cudnn_deterministic', value)
(value は True
もしくは False
)をお使いください。 chainer.using_config()
をご覧ください。
Parameters: |
|
---|---|
Returns: |
shapeが \((n, c_O, h_O, w_O)\)である出力値 |
Return type: |
Example
>>> n = 10
>>> c_i, c_o = 1, 3
>>> h_i, w_i = 5, 10
>>> h_k, w_k = 10, 10
>>> h_p, w_p = 5, 5
>>> x = np.random.uniform(0, 1, (n, c_i, h_i, w_i)).astype('f')
>>> x.shape
(10, 1, 5, 10)
>>> W = np.random.uniform(0, 1, (c_i, c_o, h_k, w_k)).astype('f')
>>> W.shape
(1, 3, 10, 10)
>>> b = np.random.uniform(0, 1, c_o).astype('f')
>>> b.shape
(3,)
>>> s_y, s_x = 5, 5
>>> y = F.deconvolution_2d(x, W, b, stride=(s_y, s_x), pad=(h_p, w_p))
>>> y.shape
(10, 3, 20, 45)
>>> h_o = s_y * (h_i - 1) + h_k - 2 * h_p
>>> w_o = s_x * (w_i - 1) + w_k - 2 * w_p
>>> y.shape == (n, c_o, h_o, w_o)
True