PyTorch torch.movedim 関数
torch.movedimPyTorch でテンソルの次元を移動するための関数です。指定された次元を新しい位置に移動し、新しいテンソルのビューを返します。
この関数は、特定の操作のためにテンソルの形状を調整する際に非常に便利です。例えば、画像データを処理するときやニューラルネットワークの入力を準備するときに役立ちます。
関数定義
torch.movedim(input, source, destination)
パラメータ:
input(Tensor): 入力テンソル。source(int または tuple of int): 移動する元の次元インデックス。整数または次元インデックスのタプルを指定できます。destination(int または tuple of int): 移動先の位置インデックス。整数または次元インデックスのタプルを指定でき、長さは source と同じである必要があります。
戻り値:
torch.Tensor: 次元が移動されたテンソルのビューを返します。
使用例
例
import torch
# (batch, channel, height, width) の形状のテンソルを作成する
x = torch.randn(32, 3, 224, 224)
# チャネル次元を最後の次元に移動する
# 位置1から位置3へ移動する
y = torch.movedim(x, 1, 3)
print("元の形状:", x.shape)
print("移動後の形状:", y.shape)
# (batch, channel, height, width) の形状のテンソルを作成する
x = torch.randn(32, 3, 224, 224)
# チャネル次元を最後の次元に移動する
# 位置1から位置3へ移動する
y = torch.movedim(x, 1, 3)
print("元の形状:", x.shape)
print("移動後の形状:", y.shape)
出力結果は次のとおりです:
原始形状: torch.Size([32, 3, 224, 224]) 移动后形状: torch.Size([32, 224, 224, 3])
例
import torch
# (D0, D1, D2, D3) の形状のテンソルを作成する
x = torch.randn(2, 3, 4, 5)
# 複数の次元をまとめて移動する
# 次元0と1を次元2と3の位置に移動する
y = torch.movedim(x, source=(0, 1), destination=(2, 3))
print("元の形状:", x.shape)
print("移動後の形状:", y.shape)
# (D0, D1, D2, D3) の形状のテンソルを作成する
x = torch.randn(2, 3, 4, 5)
# 複数の次元をまとめて移動する
# 次元0と1を次元2と3の位置に移動する
y = torch.movedim(x, source=(0, 1), destination=(2, 3))
print("元の形状:", x.shape)
print("移動後の形状:", y.shape)
出力結果は次のとおりです:
原始形状: torch.Size([2, 3, 4, 5]) 移动后形状: torch.Size([4, 5, 2, 3])
例
import torch
# 画像テンソルを (N, C, H, W) から (N, H, W, C) に変換する
# これは、チャネルが最後の位置にある必要があるAPIにデータを送信する場合に便利です
images = torch.randn(16, 3, 64, 64)
images_permuted = torch.movedim(images, 1, 3)
print("元の形状 (N, C, H, W):", images.shape)
print("変換後の形状 (N, H, W, C):", images_permuted.shape)
# 画像テンソルを (N, C, H, W) から (N, H, W, C) に変換する
# これは、チャネルが最後の位置にある必要があるAPIにデータを送信する場合に便利です
images = torch.randn(16, 3, 64, 64)
images_permuted = torch.movedim(images, 1, 3)
print("元の形状 (N, C, H, W):", images.shape)
print("変換後の形状 (N, H, W, C):", images_permuted.shape)
注意:torch.movedim返されるのはコピーではなくビューであるため、操作は効率的です。同様の関数にはtorch.moveaxis、これはtorch.movedim機能は同じですが、パラメータ名が異なります。
その他の拡張
Pytorch torch リファレンスマニュアル