PyTorchでテンソルをパディングする方法
コード 1
torch.nn.functional.pad(input, pad, mode='constant', value=0.0)
- input: パディングするテンソル
- pad: パディングの位置
- mode: パディングの方法
- value: パディングの値
説明
- pad- 次元のテンソルを入力とする時、最大で組の引数を入力できる。 - は次元の低いインデックス側、つまり番目の値の前にいくつパディングするかを示す。 - は次元の高いインデックス側、つまり最後の値の後にいくつパディングするかを示す。 - >>> A = torch.ones(2,3) >>> A tensor([[1., 1., 1.], [1., 1., 1.]]) >>> PA = F.pad(A, (1,2,3,4), "constant", 0) tensor([[0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 1., 1., 1., 0., 0.], [0., 1., 1., 1., 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.]]) >>> PA.shape torch.Size([9, 6])
- mode- constantは指定された全ての場所を固定の定数にマッピングする。- >>> F.pad(A, (2,3), "constant", 3) tensor([[3., 3., 1., 1., 1., 3., 3., 3.], [3., 3., 1., 1., 1., 3., 3., 3.]])- reflectは各次元の0番目と最後の値を基準にして、対称複製した値をパディングする。何故か3次元以上のテンソルのみ入力として使えるし、パディングサイズは組に固定されている。つまり、0番目と1番目の次元にはパディングされない。- >>> B = torch.tensor([[[1,2,3,4,5.]],[[6,7,8,9,10]]] tensor([[[ 1., 2., 3., 4., 5.]], [[ 6., 7., 8., 9., 10.]]]) >>> F.pad(B, (2,3), 'reflect') tensor([[[ 3., 2., 1., 2., 3., 4., 5., 4., 3., 2.]], [[ 8., 7., 6., 7., 8., 9., 10., 9., 8., 7.]]])- replicateは0番目と最後の値をそのまま複製してパディングし、- circularは各次元の値が循環するようにパディングされる。
