Deep

Deepラーニングのメモです

1878 views

普通のMaxPoolingは以下のように、カーネルサイズに該当する値から最大値を抽出する。

一方、globalPoolingは、全体から最大値を得る。

これが何の役に立つのかというと、レイヤ―の終盤、コンボリューションの出力サイズが7×7くらいになる。このとき、MaxPoolingのカーネルサイズを7×7にすれば同じことっぽい。
全結合で改めて計算し直さなくても、各セルの最大値だけ使って全結合チックにできる。

下は全結合。

下はglobalAverageを使ったとき(MaxPoolingじゃないけど)

識別率に特に影響はないらしい。省エネが目的か?
https://qiita.com/mine820/items/1e49bca6d215ce88594aを参考にさせていただきました。

kerasにglobalMaxPoolingがあるが、pytorchにはない。
自分で作れとのこと。

import torch.nn.functional as F
F.max_pool2d(x, kernel_size=x.size()[2:])

または

F.adaptive_max_pool2d(x, (1, 1))

https://www.xn--ebkc7kqd.com/entry/pytorch-poolingを参考にさせていただきました。

ちなみにkerasだと次のプログラムでMaxpooling2Dの挙動を確認できる。

import numpy as np
from keras import models
from keras import layers


if __name__ == '__main__':
    virtual_img = [
            [
                [
                    [0,0,0],
                    [0,1,0],
                    [0,0,0]
                ],
                [
                    [0,0,0],
                    [1,0,0],
                    [0,0,0]
                ],
                [
                    [0,1,0],
                    [0,0,0],
                    [0,0,0]
                ],
            ]

        ]

    virtual_img = np.array(virtual_img)
    print(virtual_img.shape)
    model = models.Sequential()
    model.add(layers.Conv2D(2, (3, 3),padding='same', input_shape=(3,3,3)))
    #model.add(layers.MaxPooling2D((2, 2), strides=(1, 1)))
    model.add(layers.GlobalMaxPooling2D())

    y = model.predict(virtual_img)
    print(y)

Page 12 of 29.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626