1. ホーム
  2. pytorch

[解決済み] pytorchのreshapeとviewの違いは何ですか?

2022-04-27 14:54:44

質問

numpyでは ndarray.reshape() を使用して配列の形状を変更します。

私は、pytorchでは、人々が torch.view(...) を使用すると、同じ目的で、同時に torch.reshape(...) が存在する。

そこで気になるのが、両者の違いや、どちらを使うべきかということです。

どのように解決するのですか?

torch.view は以前から存在していました。これは新しい形状を持つテンソルを返す。返されたテンソルは、元のテンソルと下位のデータを共有する。 を参照。 のドキュメントはこちら .

一方、どうやら torch.reshape は、最近バージョン0.4で導入された . によると ドキュメント の場合、このメソッドは

input と同じデータ、同じ要素数で、指定された形状のテンソルを返す。可能な場合、返されるテンソルは入力のビューである。そうでなければ、コピーである。連続した入力と互換性のあるストライドを持つ入力はコピーせずに形状を変更できるが、コピーとビューの動作に依存してはならない。

という意味です。 torch.reshape は、元のテンソルのコピーまたはビューを返すかもしれない。ビューを返すかコピーを返すかはあてにならない。開発者によると

コピーが必要な場合はclone()を、同じストレージが必要な場合はview()を使用してください。reshape()のセマンティクスは、ストレージを共有するかしないかであり、事前に知ることはできない。

もう一つの違いは reshape() は連続したテンソルでも非連続のテンソルでも操作できるのに対して view() は連続したテンソルに対してのみ操作できる。また こちら の意味について contiguous .