プーリング層(Poolingレイヤ)

プーリング層のイメージ

ここではプーリング層についてお伝えします。
プーリング層は、畳み込み層の出力結果に対し区画ごとの最大値を求めます。このように畳み込み層の凝縮された画素情報を、さらに区画ごとの最大値で集約する方法をMAXプーリングと言います。

以下のイメージを見てください。
9区画ごとの最大値(黄色の背景色)を3×3の縮約した表に凝縮しています。このように畳み込み層を凝縮した表がプーリング層です。

今回は最大値を求めるMAXプーリングの手法を紹介しておりますが、他にも「平均プーリング」や「L2プーリング」という手法もあります。

畳み込み層のニューロンが算出した出力表は、フィルタを通してみた画素情報を凝縮していますが、まだまだ情報量が多すぎます。そこで、さらに情報を縮約を行います。それがプーリング層の役割です。

プーリング層のプログラム

上記のイメージを実現するプログラムが以下になります。
ソースは「0から作るDeepLearning」のサンプルになります。
上のイメージあるようにMAXプーリングを使った手法になります。

col2im関数やim2col関数についてはConvolutionレイヤ(畳み込み層)でサンプルを載せておりますので、ここでは割愛します。また、プログラムの説明は書籍を参考にしてください。
ここでもfor文による多重ループを避け、パフォーマンスを改善させています。

import numpy as np
class Pooling:
    def __init__(self, pool_h, pool_w, stride=1, pad=0):
        self.pool_h = pool_h
        self.pool_w = pool_w
        self.stride = stride
        self.pad = pad
        self.x = None
        self.arg_max = None
    def forward(self, x):
        N, C, H, W = x.shape
        out_h = int(1 + (H - self.pool_h) / self.stride)
        out_w = int(1 + (W - self.pool_w) / self.stride)
        col = im2col(x, self.pool_h, self.pool_w, self.stride, self.pad)
        col = col.reshape(-1, self.pool_h * self.pool_w)
        arg_max = np.argmax(col, axis=1)
        out = np.max(col, axis=1)
        out = out.reshape(N, out_h, out_w, C).transpose(0, 3, 1, 2)
        self.x = x
        self.arg_max = arg_max
        return out
    def backward(self, dout):
        dout = dout.transpose(0, 2, 3, 1)
        pool_size = self.pool_h * self.pool_w
        dmax = np.zeros((dout.size, pool_size))
        dmax[np.arange(self.arg_max.size), self.arg_max.flatten()] = dout.flatten()
        dmax = dmax.reshape(dout.shape + (pool_size,))
        dcol = dmax.reshape(dmax.shape[0] * dmax.shape[1] * dmax.shape[2], -1)
        dx = col2im(dcol, self.x.shape, self.pool_h, self.pool_w, self.stride, self.pad)
        return dx
引用元

オライリーJapan 斎藤康毅 著 「セロから作るDeep Learning」

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny