0. はじめに
python素人(=当然numpy素人)が機械学習を学習する際に出会った関数で、理解に苦労したものを載せています。今回は「numpy.pad」。
以降numpyはnpと記載しています。
1. 登場箇所
CNNの畳み込みのところ。
畳み込む際にサイズが小さくならないように、画像の周りを数値(通常は0)で埋める。(=パディング)
2. 動作
行列の前後に値を足す。
3. 形式
np.pad(array,range,mode(,そのほか))
引数名 | 説明 | 補足 |
---|---|---|
array | N次元の行列 | |
range | 各次元における、前後のパディング範囲 | |
mode | 埋め込み方式 | 'constraint'(定数)が良く使われる |
補足
デフォルトはパディング値=0。
4. リファレンス
5. 例
例1
a = [[1, 2], [3, 4]]
np.pad(a, [(1, 2), (3, 4)], 'constant')
array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 2, 0, 0, 0, 0],
[0, 0, 0, 3, 4, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
考え方
例2:im2col
# N: データ数, C: チャンネル数, H: 各画像の幅, W: 各画像の高さ
N, C, H, W = input_data.shape
# 画像データの上下左右に0を1つパディング
img = np.pad(input_data, [(0,0), (0,0), (1, 1), (1, 1)], 'constant')
6. 蛇足(次回予告?)
ここまで書いてなんですが、結局im2colの理解そのものが難しかったなと。
「ゼロつく」読んで、自分で絵をかいてみて、結構苦労したので、im2colについてまとめたいと思います(自分が忘れそうなので…)。