- 1. 概要
- 2. メソッド
- 3. やってみる
1. 概要
「階」という言い方が正しいのかどうか、わかりません。
参考サイトに「階」と表現されているので、そのまま使います。
本ページは、下記のサイトを参考にさせていただきました。
「[PyTorch] torch.repeat と torch.expand の違い #Python」
2. メソッド
メソッドとして、「repeat」「expand」があるようです。
「repeat」が、完全コピー。
「expand」は、複製しているが、メモリ割り当ては、元のままとのことです。
複製したものをそれぞれ、いじるには、「repeat」を使わなければならないらしい。
3. やってみる
下記ようなコードを書いてみました。
import torch
x = torch.randn(4, 3)
・・・ 略 ・・・
print('ndim shape element()', x.ndim, x.shape, x.nelement())
x = x.expand(3, 128, 128)
print('ndim shape element()', x.ndim, x.shape, x.nelement())
print(x)
実行すると、下記の出力結果が得られます。
ndim shape element() 3 torch.Size([1, 128, 128]) 16384
ndim shape element() 3 torch.Size([3, 128, 128]) 49152
tensor([[[1.4961, 1.5036, 1.5101, ..., 1.6926, 1.6856, 1.6775],
[1.5076, 1.5151, 1.5216, ..., 1.6920, 1.6849, 1.6768],
[1.5169, 1.5244, 1.5310, ..., 1.6915, 1.6844, 1.6763],
...,
[2.4843, 2.4935, 2.5016, ..., 0.5159, 0.5141, 0.5120],
[2.4759, 2.4851, 2.4931, ..., 0.5140, 0.5122, 0.5101],
[2.4656, 2.4747, 2.4827, ..., 0.5116, 0.5098, 0.5078]],
[[1.4961, 1.5036, 1.5101, ..., 1.6926, 1.6856, 1.6775],
[1.5076, 1.5151, 1.5216, ..., 1.6920, 1.6849, 1.6768],
[1.5169, 1.5244, 1.5310, ..., 1.6915, 1.6844, 1.6763],
...,
[2.4843, 2.4935, 2.5016, ..., 0.5159, 0.5141, 0.5120],
[2.4759, 2.4851, 2.4931, ..., 0.5140, 0.5122, 0.5101],
[2.4656, 2.4747, 2.4827, ..., 0.5116, 0.5098, 0.5078]],
[[1.4961, 1.5036, 1.5101, ..., 1.6926, 1.6856, 1.6775],
[1.5076, 1.5151, 1.5216, ..., 1.6920, 1.6849, 1.6768],
[1.5169, 1.5244, 1.5310, ..., 1.6915, 1.6844, 1.6763],
...,
[2.4843, 2.4935, 2.5016, ..., 0.5159, 0.5141, 0.5120],
[2.4759, 2.4851, 2.4931, ..., 0.5140, 0.5122, 0.5101],
[2.4656, 2.4747, 2.4827, ..., 0.5116, 0.5098, 0.5078]]])
|