chainerでpaddingするときの方法、備忘録。
パディングするベクトルを用意。
>>> from chainer import functions as F >>> import numpy as np >>> a = np.array([[1,2,3]], 'f') >>> b = np.array([[1,2,3,4]], 'f') >>> a array([[ 1., 2., 3.]], dtype=float32) >>> b array([[ 1., 2., 3., 4.]], dtype=float32)
F.pad
画像系で畳み込みするときとかに使う。
'''
F.pad(
パディングしたいベクトル,
パディングサイズ,
’constant’,
constant_values=パディングに使う数字
)
'''
>>> F.pad(a,5,'constant').data
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 2., 3., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]], dtype=float32)
>>> F.pad(a,5,'constant',constant_values=-1).data
array([[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., 1., 2., 3., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.]], dtype=float32)
F.pad_sequence
僕がよく使ってよく忘れるのはF.pad_sequenceのほう。
'''
F.pad_sequence(
パディングしたいベクトルのリスト,
パディングサイズ,
パディングに使う数字
)
'''
>>> F.pad_sequence(a,5).data
array([[ 1., 2., 3., 0., 0.]], dtype=float32)
>>> F.pad_sequence(b,5).data
array([[ 1., 2., 3., 4., 0.]], dtype=float32)
a,bをまとめてパディングしたかったら、次元を一つ落としたリストを食わせる。
>>> F.pad_sequence([a[0],b[0]],5).data array([[ 1., 2., 3., 0., 0.], [ 1., 2., 3., 4., 0.]], dtype=float32) >>> F.pad_sequence([a[0],b[0]],5, -1).data array([[ 1., 2., 3., -1., -1.], [ 1., 2., 3., 4., -1.]], dtype=float32)