【TensorFlow】2次元のテンソル(行列)同士で四則演算と行列積を行う基本コード
前回のスカラー(単一の数値)の演算に続き、今回はAIや機械学習の計算で基本となる**「2次元のテンソル(行列)」**同士の演算方法を整理します。行列の足し算や、要素ごとの掛け算、そしてディープラーニングの内部で多用される「行列積(ドット積)」の具体的な書き方をコードと出力結果で確認していきましょう。
1. 【 概要 】
2次元のテンソルとは、行と列を持つ「行列(Matrix)」のデータ構造です。
tf.constant() に入れ子のリスト(リストのリスト)を渡すことで、2次元テンソルを簡単に作成できます。Python標準の数値計算と異なり、TensorFlowの関数や演算子は自動的に並列計算や効率的な行列処理を行ってくれます。
2. 【 基本手順(2つのステップ) 】
(1) 入れ子リストを用いた2次元テンソルの定義
(2) 要素ごとの演算(要素積)と、数学的な行列積の実行
通常の四則演算子による「要素ごとの計算」と、
matrix_a = tf.constant([[1, 2], [3, 4]]) のように、行と列を持つデータを定義する。(2) 要素ごとの演算(要素積)と、数学的な行列積の実行
通常の四則演算子による「要素ごとの計算」と、
tf.matmul() による「行列積」を使い分ける。3. 整理:行列演算の「要素ごとの計算」と「行列積」の違い
行列を扱う際につまずきやすい「2つの計算方法の違い」を整理しておきましょう。
【 演算の種類と特徴 】
・要素ごとの演算(+, -, *, /)
同じ位置にある要素同士(例:1行1列目同士)で計算を行います。例えば
・行列積(tf.matmul)
線形代数における通常の「行列のかけ算(行×列の計算)」を行います。ディープラーニングの全結合層などで頻繁に使用される極めて重要な計算です。
・出力値(shape)の確認
2次元テンソルを出力すると
同じ位置にある要素同士(例:1行1列目同士)で計算を行います。例えば
A * B を行うと、それぞれの要素が掛け合わされます(アダマール積)。・行列積(tf.matmul)
線形代数における通常の「行列のかけ算(行×列の計算)」を行います。ディープラーニングの全結合層などで頻繁に使用される極めて重要な計算です。
・出力値(shape)の確認
2次元テンソルを出力すると
shape=(2, 2) のように表示され、何行何列のデータ構造であるかが一目でわかります。4. 関連して押さえたい「2次元テンソル演算の主な関数」
TensorFlowで2次元テンソルを操作する際に役立つ代表的な関数です。
・要素ごとの掛け算:tf.multiply(a, b) (演算子: a * b)
・数学的な行列積:tf.matmul(a, b) (演算子: a @ b)
・形状の確認や変更:tensor.shape や tf.reshape()
5. 補足:Pythonでの実装コード例
Google Colab等でそのまま実行できる2次元テンソル演算のサンプルコードと実際の実行結果です。
# コード実行例
import tensorflow as tf
# 1. 2つの2次元テンソル(2x2行列)を定義
matrix_a = tf.constant([[1, 2],
[3, 4]])
matrix_b = tf.constant([[5, 6],
[7, 8]])
# 2. 要素ごとの加算と掛け算
add_result = matrix_a + matrix_b # 行列の足し算
element_mul = matrix_a * matrix_b # 要素ごとの掛け算(アダマール積)
# 3. 本格的な行列積(ドット積)
matmul_result = tf.matmul(matrix_a, matrix_b)
# 4. 結果の表示
print("--- 行列の足し算 ---")
print(add_result.numpy())
print("\n--- 要素ごとの掛け算 ---")
print(element_mul.numpy())
print("\n--- 行列積(tf.matmul) ---")
print(matmul_result.numpy())
# 出力結果
# --- 行列の足し算 ---
# [[ 6 8]
# [10 12]]
#
# --- 要素ごとの掛け算 ---
# [[ 5 12]
# [21 32]]
#
# --- 行列積(tf.matmul) ---
# [[19 22]
# [43 50]]
import tensorflow as tf
# 1. 2つの2次元テンソル(2x2行列)を定義
matrix_a = tf.constant([[1, 2],
[3, 4]])
matrix_b = tf.constant([[5, 6],
[7, 8]])
# 2. 要素ごとの加算と掛け算
add_result = matrix_a + matrix_b # 行列の足し算
element_mul = matrix_a * matrix_b # 要素ごとの掛け算(アダマール積)
# 3. 本格的な行列積(ドット積)
matmul_result = tf.matmul(matrix_a, matrix_b)
# 4. 結果の表示
print("--- 行列の足し算 ---")
print(add_result.numpy())
print("\n--- 要素ごとの掛け算 ---")
print(element_mul.numpy())
print("\n--- 行列積(tf.matmul) ---")
print(matmul_result.numpy())
# 出力結果
# --- 行列の足し算 ---
# [[ 6 8]
# [10 12]]
#
# --- 要素ごとの掛け算 ---
# [[ 5 12]
# [21 32]]
#
# --- 行列積(tf.matmul) ---
# [[19 22]
# [43 50]]
6. まとめ
TensorFlowにおける2次元テンソルは、tf.constant() で直感的に定義でき、通常の足し算や要素ごとの計算だけでなく、AI開発に不可欠な「行列積(tf.matmul)」を簡単に計算できます。データが何次元でどのように処理されているかを意識することで、AIモデルの構造もぐっと理解しやすくなります!
PR