4
0

More than 1 year has passed since last update.

range of [-1, 0]というPyTorchメッセージは何の意味?

Posted at

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=0dim=-4で指定できます。
  • チャンネル(channel)の軸(二番目)はdim=1dim=-3で指定できます。
  • 高さ(height)・垂直(vertical)の軸(三番目)はdim=2dim=-2で指定できます。
  • 幅(width)・水平(horizontal)の軸(四番目)はdim=3dim=-1で指定できます。

したがって、4Dテンソルの場合はdim引数に[-4, 3]の範囲にある値を設定できます。

冒頭のx.transposeのエラーメッセージに戻すと、expected to be in range of [-1, 0]と言われたので、xは1次元配列で、軸は一つしかありません。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0