PyTorchを使う時にx.transpose(2, 1)
のソースコードに下記のエラーメッセージが出ました。
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 2)
意味がよくわかりませんでした。特にrange of [-1, 0]
の意味が理解できませんでした。
調べた結果、結論を簡単に言ってしまうと、range of [-1, 0]
は-1から0までという意味です。上記IndexErrorメッセージの意味として、テンソルx
は1次元配列ですが、transpose
関数の引数に2が渡されました。transpose
関数はテンソルに対して次元(軸)を入れ替えるため、引数で指定された二つの軸はテンソルに存在しなければなりません。
下記のStackOverflow回答がわかりやすいと思いますので、こちらに翻訳して載せます。
テンソルの次元(軸)を関数の引数に指定する時(例えば
m = torch.nn.LogSoftmax(dim=1)
)に、0から始まり、1が二番目の正の次元を指定することができます。
代わりに、負の次元を指定することもできます。その場合、-1は末尾の軸、-2は末尾から二番目の軸です。例えば、四次元である4Dテンソル
b * c * h * w
の場合、
- バッチ(batch)の軸(一番目)は
dim=0
かdim=-4
で指定できます。- チャンネル(channel)の軸(二番目)は
dim=1
かdim=-3
で指定できます。- 高さ(height)・垂直(vertical)の軸(三番目)は
dim=2
かdim=-2
で指定できます。- 幅(width)・水平(horizontal)の軸(四番目)は
dim=3
かdim=-1
で指定できます。したがって、4Dテンソルの場合は
dim
引数に[-4, 3]
の範囲にある値を設定できます。
冒頭のx.transpose
のエラーメッセージに戻すと、expected to be in range of [-1, 0]
と言われたので、x
は1次元配列で、軸は一つしかありません。