次元(30, 35, 49)
のテンソルがあります。形状(30, 35, 512)
を持つ別のテンソルと乗算できるようにするために、(30, 35, 512)
に形状を変更したいと思います。
(30, 35, 49)
次元にするために、(30, 35, 512)
次元でテンソルをパディングします。
これをどのように行うことができますか?
最も簡単な解決策は、パディング値とターゲットディメンションでテンソルを割り当て、データがある部分を割り当てることです。
target = torch.zeros(30, 35, 512)
source = torch.ones(30, 35, 49)
target[:, :, :49] = source
テンソルにゼロをパディングし、それを別のテンソルで乗算することが最終的に意味をなすという保証はないことに注意してください、それはあなた次第です。
@nemoのソリューションは正常に機能しますが、pytorch内部ルーチン _torch.nn.functional.pad
_ があります。これは同じことを行い、torch.ones(*sizes)*pad_value
ソリューションが行ういくつかのプロパティがあります。そうではありません(つまり、反射パディングや複製パディングのような他のパディング形式...勾配関連のプロパティもチェックします):
_import torch.nn.functional as F
source = torch.Rand((5,10))
# now we expand to size (7, 11) by appending a row of 0s at pos 0 and pos 6,
# and a column of 0s at pos 10
result = F.pad(input=source, pad=(0, 1, 1, 1), mode='constant', value=0)
_
引数のセマンティクスは次のとおりです。
input
:ソーステンソル、pad
:フォームの長さ2 * len(source.shape)
のリスト(最後の軸の開始、最後の軸の終了、2番目から最後の軸の開始、2番目から最後の軸の終了、3番目から最後の軸の開始など) )各軸の最初と最後に追加する次元の数を示します。mode
:_'constant'
_、_'reflect'
_、または_'replicate'
_。デフォルト:さまざまな種類のパディングの_'constant'
_value
は定数パディング用です。