unsqueeze(dim)とunsqueeze_(dim)の違いは?

unsqueeze(dim)とunsqueeze_(dim)の違い【PyTorch】

私は以前まで、PyTorchのunsqueeze(dim)とunsqueeze_(dim)の違いを知らずに使用していました。

この記事では2つの違いをまとめていきます。

公式ドキュメンテーション

以下で引用している公式ドキュメンテーションによると、unsqueeze_(dim)はunsqueeze(dim)の「in-place」バージョンだそうです。

PyTorch documentation: torch.Tensor

unsqueeze(dim)

Returns a new tensor with a dimension of size one inserted at the specified position.

unsqueeze_(dim)

In-place version of unsqueeze()

in-placeとは

元のテンソルを書き換える処理のことです。

テスト

unsqueeze(dim)のテスト

>>> import torch
>>> x.size()
torch.Size([2, 3])
>>> x.unsqueeze(0).size()
torch.Size([1, 2, 3])
>>> x.size()
torch.Size([2, 3])

unsqueeze_(dim)のテスト

>>> import torch
>>> x.size()
torch.Size([2, 3])
>>> x.unsqueeze_(0).size()
torch.Size([1, 2, 3])
>>> x.size()
torch.Size([1, 2, 3])

まとめ

  • unsqueeze(dim):元のテンソルを書き換えずに、次元を増やしたテンソルを返す
  • unsqueeze_(dim):元のテンソルを書き換えて、テンソルの次元を増やす

さいごに

PyTorchのunsqueeze(dim)とunsqueeze_(dim)の違いをまとめてみました。参考になれば幸いです。


以上です。

Ad.