in-place処理であることを意味します。
はじめに
PyTorchを触っていると、しばしばアンダーバー_
を接尾語とする関数を見かけます。
kaiming_normal_
add_
- etc...
初見で意味を知らなかったので備忘録メモです。
PyTorch関数名の末尾アンダーバー_
意味
PyTorch関数名の末尾アンダーバー_
は、in-place処理を意味します。
in-place処理とは、元のデータを直接変更する処理のことです。
In-place operations Operations that have a _ suffix are in-place. For example: x.copy_(y), x.t_(), will change x.
Ref. Tensors — PyTorch Tutorials 2.4.0+cu121 documentation
in-place処理はメモリを節約することができますが、そこまでの履歴を書き換えることになるためautograd処理に問題が生じる可能性があるとのこと。 基本的には非推奨です。
In-place operations save some memory, but can be problematic when computing derivatives because of an immediate loss of history. Hence, their use is discouraged.
Ref. Tensors — PyTorch Tutorials 2.4.0+cu121 documentation
具体例
ごく簡単な具体例として、add
とadd_
の違いを見ていきます。
まずはadd
の例:
import torch x = torch.tensor([1, 2, 3]) print("x: ", x) y = x.add(1) print("y: ", y) print("x: ", x) ### 実行結果 ### # x: tensor([1, 2, 3]) # y: tensor([2, 3, 4]) # x: tensor([1, 2, 3])
add
前後で、x
には変化がありません。
一方、add_
では、
x_ = torch.tensor([1, 2, 3]) print("x_: ", x_) y_ = x_.add_(1) print("y_: ", y_) print("x_: ", x_) ### 実行結果 ### # x_: tensor([1, 2, 3]) # y_: tensor([2, 3, 4]) # x_: tensor([2, 3, 4])
x_
自体も1加算されることがわかります。
in-place処理されてますね。
おわりに
以上、PyTorch関数名の末尾アンダーバー_
の意味をメモしました。
どなたかの参考になれば幸いです。
[関連記事]
参考
Tensors — PyTorch Tutorials 2.4.0+cu121 documentation
python - What does the underscore suffix in PyTorch functions mean? - Stack Overflow
What do the underscores at the end of functions mean in pytorch? - PyTorch Forums
What is `in-place operation`? - PyTorch Forums
torch.nn.init — PyTorch 2.4 documentation
pytorch/torch/nn/init.py at 0adb5843766092fba584791af76383125fd0d01c · pytorch/pytorch · GitHub