PyTorchのテンソルで要素ごとの加算(Element-wise Addition)を実行する方法
PyTorchでは、torch.add()を使用することで、テンソル同士の要素ごとの加算(element-wise addition)を実行できます。この関数は、対応する位置にある要素同士を足し合わせます。テンソルにスカラー値を加算することも、別のテンソルを加算することも可能です。また、次元が同じテンソル同士だけでなく、異なる次元のテンソル同士の加算にも対応しており、結果として得られるテンソルの次元は、より高い次元を持つテンソルと同じになります。
実行手順
必要なライブラリをインポートします。以下のすべてのPythonサンプルではtorchライブラリを使用します。事前にインストール済みであることを確認してください。
2つ以上のPyTorchテンソルを定義して内容を表示します。スカラー値を加算したい場合は、その値も定義しておきます。
torch.add()を使ってテンソル同士を加算し、その結果を新しい変数に代入します。テンソルにスカラー値を加算することもできます。なお、このメソッドで加算しても、元のテンソルは一切変更されません。
最終的なテンソルを表示します。
例1:テンソルへのスカラー値の加算
次のPythonプログラムは、テンソルにスカラー値を加算する方法を示しています。同じ処理を3つの異なる方法で実装しています。
# 要素ごとの加算を行うPythonプログラム
# 必要なライブラリをインポート
import torch
# テンソルを作成
t = torch.Tensor([1,2,3,2])
print("元のテンソル t:\n", t)
# テンソルにスカラー値を加算
v = torch.add(t, 10)
print("要素ごとの加算結果:\n", v)
# 同じ操作は以下のようにも記述できる
t1 = torch.Tensor([10])
w = torch.add(t, t1)
print("要素ごとの加算結果:\n", w)
# 上記の操作を別の方法で実現
t2 = torch.Tensor([10,10,10,10])
x = torch.add(t, t2)
print("要素ごとの加算結果:\n", x)出力
元のテンソル t: tensor([1., 2., 3., 2.]) 要素ごとの加算結果: tensor([11., 12., 13., 12.]) 要素ごとの加算結果: tensor([11., 12., 13., 12.]) 要素ごとの加算結果: tensor([11., 12., 13., 12.])
このように、スカラー値を直接渡す方法、単一要素のテンソルを渡す方法、そして各要素に対応した値を持つテンソルを渡す方法のいずれでも、同じ結果が得られることがわかります。
例2:1Dテンソルと2Dテンソルの加算
次のPythonプログラムは、1次元テンソルと2次元テンソルを加算する方法を示しています。ブロードキャスト機能により、次元が異なるテンソル同士でも加算が可能です。
# ライブラリをインポート
import torch
# 2次元テンソルを作成
T1 = torch.Tensor([[1,2],[4,5]])
# 1次元テンソルを作成
T2 = torch.Tensor([10]) # t2 = torch.Tensor([10,10]) でも可
print("T1:\n", T1)
print("T2:\n", T2)
# 1次元テンソルを2次元テンソルに加算
v = torch.add(T1, T2)
print("要素ごとの加算結果:\n", v)出力
T1:
tensor([[1., 2.],
[4., 5.]])
T2:
tensor([10.])
要素ごとの加算結果:
tensor([[11., 12.],
[14., 15.]])1次元テンソルT2の値「10」が、2次元テンソルT1のすべての要素に自動的に適用されている点に注目してください。これはPyTorchのブロードキャスト機能によるものです。
例3:2Dテンソル同士の加算
次のプログラムは、2次元テンソル同士を加算する方法を示しています。
# ライブラリをインポート
import torch
# 2つの2次元テンソルを作成
T1 = torch.Tensor([[1,2],[3,4]])
T2 = torch.Tensor([[0,3],[4,1]])
print("T1:\n", T1)
print("T2:\n", T2)
# 上記の2つの2次元テンソルを加算
v = torch.add(T1,T2)
print("要素ごとの加算結果:\n", v)出力
T1:
tensor([[1., 2.],
[3., 4.]])
T2:
tensor([[0., 3.],
[4., 1.]])
要素ごとの加算結果:
tensor([[1., 5.],
[7., 5.]])このようにtorch.add()を使えば、スカラー値との加算から多次元テンソル同士の加算まで、柔軟に要素ごとの演算を行うことができます。なお、t + vのように+演算子を使っても同じ結果が得られますが、torch.add()には出力先のテンソルを指定できるout引数などの便利なオプションが用意されています。
-
【PyTorch入門】torch.histc()でテンソルのヒストグラムを計算・可視化する方法
PyTorchでは、torch.histc() 関数を使うことでテンソルのヒストグラムを簡単に計算できます。この関数は、計算結果のヒストグラムをテンソルとして返します。主な引数は input(入力テンソル)、bins(ビン数)、min(最小値)、max(最大値) の4つです。min から max までの範囲が等幅のビンに分割され、各要素が対応するビンへ分類されます。なお、min 未満または max を超える要素は自動的に無視される点に注意してください。ヒストグラム計算の手順必要なライブラリをインポートします。以降のPythonサンプルでは torch と Matplotlib を使用するため、
-
画像をPyTorchテンソルに変換する方法【PIL・OpenCV対応の実装例つき】
PyTorchのテンソル(Tensor)とは、単一のデータ型で構成されたn次元配列(行列)のことです。NumPy配列とよく似ていますが、最大の違いは、テンソルがGPUを活用して数値計算を高速化できるという点にあります。そのため、画像を使った深層学習では、まず画像をテンソル形式へ変換することが一般的な前処理となります。 この記事では、画像をPyTorchテンソルに変換する具体的な手順を、PIL画像を使う例とOpenCV(numpy.ndarray)を使う例の2パターンでわかりやすく解説します。 画像をPyTorchテンソルに変換する手順 必要なライブラリをインポートする:torch、torch