Python - AI - Tensor - 階を増やす

クラウディア 
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]]])