この警告メッセージは、新しいテンソルを構築するときは、 の 代わりに sourceTensor.clone().detach()
または を使用することが推奨されることを思い出させます 。sourceTensor.clone().detach().requires_grad_(True)
torch.tensor(sourceTensor)
torch.tensor()
PyTorch では、入力が既存の PyTorch テンソルであっても、関数は新しいテンソルを作成し、元のテンソルとメモリを共有しないため、警告メッセージではこの推奨事項について言及しています。元のテンソルがバックプロパゲーション計算グラフの一部である場合、 torch.tensor()
関数を使用すると計算グラフ内のテンソルの履歴情報が破壊されるため、元のテンソルと新しく作成されたテンソルは勾配と計算履歴を共有しなくなります。したがって、新しいテンソルを作成する場合は、共有された計算履歴を持つテンソルを安全にコピーできるtensor.clone().detach()
または を使用することをお勧めします 。tensor.detach().clone()
具体的には、 a
そこから b
、この新しいテンソルを現在の計算グラフの一部として使用する場合は、次のメソッドを使用する必要があります。
b = a.clone().detach() # 或者 b = a.detach().clone()
交換する
b = torch.tensor(a)
結果として得られるテンソルは b
同じ形状と値を持ちますが、勾配や計算履歴を共有しないため、他の操作で安全に使用できます。