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)