chainer.functions.
convolution_2d
(x, W, b=None, stride=1,
pad=0, cover_all=False)[source]¶
2次元畳み込み関数。
この関数はConvNetsの2次元畳み込みの実装です。3つの変数をとり、入力画像 x
、フィルター荷重 W
,
そしてバイアスベクトル b
です。
表記法:これは、次元についての表記法です。
Convolution2D
関数は、フィルタ とx
における \((h_K, w_K)\) サイズのパッチの相関性を計算します。
ここで相関性とは、拡張されたベクトル間の内積に等しいことに注意してください。パッチは、各空間軸の最初の位置 (-h_P, -w_P)
からstride
(適用間隔)の倍数ぶん、シフトされた位置で抽出されます。
一番右側(もしくは一番下)のパッチはパッディングされた空間サイズを超えては適用されません。
\((s_Y, s_X)\) をフィルタの適用のストライドとします。そして、出力サイズ \((h_O, w_O)\) は 下記の式で定義されます。
cover_all
オプションが True
である場合、フィルタは全ての空間的位置をカバーします。ですから、もしフィルタの最後のストライドが空間的位置の末端をカバーしていない場合、付加的なストライドが空間的位置の末端部分に適用されます。この場合、出力サイズ \((h_O, w_O)\)
は下記の等式で定義されます。
バイアス・ベクトルが与えられた場合、全ての畳込みの出力の空間的位置にそれが加えられます。
この関数の出力は cuDNNを使用する場合、非決定論的である可能性があります。もし chainer.configuration.config.cudnn_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 = 3, 1
>>> h_i, w_i = 30, 40
>>> 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, 3, 30, 40)
>>> W = np.random.uniform(0, 1, (c_o, c_i, h_k, w_k)).astype('f')
>>> W.shape
(1, 3, 10, 10)
>>> b = np.random.uniform(0, 1, (c_o,)).astype('f')
>>> b.shape
(1,)
>>> s_y, s_x = 5, 7
>>> y = F.convolution_2d(x, W, b, stride=(s_y, s_x), pad=(h_p, w_p))
>>> y.shape
(10, 1, 7, 6)
>>> h_o = int((h_i + 2 * h_p - h_k) / s_y + 1)
>>> w_o = int((w_i + 2 * w_p - w_k) / s_x + 1)
>>> y.shape == (n, c_o, h_o, w_o)
True
>>> y = F.convolution_2d(x, W, b, stride=(s_y, s_x), pad=(h_p, w_p), cover_all=True)
>>> y.shape == (n, c_o, h_o, w_o + 1)
True