Googleによって開発されている機械学習ライブラリであるTensorFlowで、Tensorを用いた数値計算をする方法を紹介します。
Contents
Tensorを用いた数値計算
数値計算
TensorFlowで実装されている代表的な数値計算は以下のようなものがあります。
演算子 | 関数名 | 説明 |
---|---|---|
+ | tf.add | 加算(例:1 + 1 = 2) |
– | tf.subtract | 減算(例:2 – 1 = 1) |
* | tf.multiply | 乗算(例:2 * 5 = 10) |
/ | tf.divide | 除算(例:5 / 2 = 2.5) |
** | tf.pow | 累乗(例:2 ** 3 = 8) |
// | tf.math.floordiv | 切り捨て除算(例:5 // 2 = 2) |
% | tf.math.mod | 剰余(例:5 % 2 = 1) |
– | tf.negative | マイナス(例:-2) |
上記の演算は、Tensorとしてxとyがあった場合に「x+y」等のように演算子を使って直感的に使用することができます。また、それぞれの演算子と関数が紐づいているため、tf.add(x, y)のように使用して構いません。
なお、演算では、要素同士で計算が実行され、サイズが異なる場合はNumPyのブロードキャストのような動作をします。NumPyのブロードキャストの考え方については「ブロードキャスト(broadcast)の基本」でまとめているので興味があれば参考にしてください。
以降では、上記演算に関して簡単なプログラム例を紹介します。
加算 tf.add
Tensorの加算をするには、以下のようにtf.addまたは+演算子を用います。
import tensorflow as tf a = tf.constant([1, 2, 3, 4, 5]) b = tf.constant([6, 7, 8, 9, 10]) c = tf.constant(2) # 関数で計算 print(tf.add(a, b)) print(tf.add(a, c), "\n") # 演算子で計算 print(a + b) print(a + c)
【実行結果】 tf.Tensor([ 7 9 11 13 15], shape=(5,), dtype=int32) tf.Tensor([3 4 5 6 7], shape=(5,), dtype=int32) tf.Tensor([ 7 9 11 13 15], shape=(5,), dtype=int32) tf.Tensor([3 4 5 6 7], shape=(5,), dtype=int32)
減算 tf.subtract
Tensorの減算をするには、以下のようにtf.subtractまたは-演算子を用います。
import tensorflow as tf a = tf.constant([1, 2, 3, 4, 5]) b = tf.constant([6, 7, 8, 9, 10]) c = tf.constant(2) # 関数で計算 print(tf.subtract(a, b)) print(tf.subtract(a, c), "\n") # 演算子で計算 print(a - b) print(a - c)
【実行結果】 tf.Tensor([-5 -5 -5 -5 -5], shape=(5,), dtype=int32) tf.Tensor([-1 0 1 2 3], shape=(5,), dtype=int32) tf.Tensor([-5 -5 -5 -5 -5], shape=(5,), dtype=int32) tf.Tensor([-1 0 1 2 3], shape=(5,), dtype=int32)
乗算 tf.multiply
Tensorの乗算をするには、以下のようにtf.multiplyまたは*演算子を用います。
import tensorflow as tf a = tf.constant([1, 2, 3, 4, 5]) b = tf.constant([6, 7, 8, 9, 10]) c = tf.constant(2) # 関数で計算 print(tf.multiply(a, b)) print(tf.multiply(a, c), "\n") # 演算子で計算 print(a * b) print(a * c)
【実行結果】 tf.Tensor([ 6 14 24 36 50], shape=(5,), dtype=int32) tf.Tensor([ 2 4 6 8 10], shape=(5,), dtype=int32) tf.Tensor([ 6 14 24 36 50], shape=(5,), dtype=int32) tf.Tensor([ 2 4 6 8 10], shape=(5,), dtype=int32)
除算 tf.divide
Tensorの除算をするには、以下のようにtf.divideまたは/演算子を用います。
import tensorflow as tf a = tf.constant([1, 2, 3, 4, 5]) b = tf.constant([6, 7, 8, 9, 10]) c = tf.constant(2) # 関数で計算 print(tf.divide(a, b)) print(tf.divide(a, c), "\n") # 演算子で計算 print(a / b) print(a / c)
【実行結果】 tf.Tensor([0.16666667 0.28571429 0.375 0.44444444 0.5 ], shape=(5,), dtype=float64) tf.Tensor([0.5 1. 1.5 2. 2.5], shape=(5,), dtype=float64) tf.Tensor([0.16666667 0.28571429 0.375 0.44444444 0.5 ], shape=(5,), dtype=float64) tf.Tensor([0.5 1. 1.5 2. 2.5], shape=(5,), dtype=float64)
累乗 tf.pow
Tensorの累乗をするには、以下のようにtf.powまたは**演算子を用います。
import tensorflow as tf a = tf.constant([1, 2, 3, 4, 5]) b = tf.constant([6, 7, 8, 9, 10]) c = tf.constant(2) # 関数で計算 print(tf.pow(a, b)) print(tf.pow(a, c), "\n") # 演算子で計算 print(a**b) print(a**c)
【実行結果】 tf.Tensor([ 1 128 6561 262144 9765625], shape=(5,), dtype=int32) tf.Tensor([ 1 4 9 16 25], shape=(5,), dtype=int32) tf.Tensor([ 1 128 6561 262144 9765625], shape=(5,), dtype=int32) tf.Tensor([ 1 4 9 16 25], shape=(5,), dtype=int32)
切り捨て除算 tf.math.floordiv
Tensorの切り捨て除算をするには、以下のようにtf.math.floordivまたは//演算子を用います。
import tensorflow as tf a = tf.constant([6, 7, 8, 9, 10]) b = tf.constant([1, 2, 3, 4, 5]) c = tf.constant(2) # 関数で計算 print(tf.math.floordiv(a, b)) print(tf.math.floordiv(a, c), "\n") # 演算子で計算 print(a // b) print(a // c)
【実行結果】 tf.Tensor([6 3 2 2 2], shape=(5,), dtype=int32) tf.Tensor([3 3 4 4 5], shape=(5,), dtype=int32) tf.Tensor([6 3 2 2 2], shape=(5,), dtype=int32) tf.Tensor([3 3 4 4 5], shape=(5,), dtype=int32)
剰余 tf.math.mod
Tensorの剰余を求めるには、以下のようにtf.math.modまたは%演算子を用います。
import tensorflow as tf a = tf.constant([6, 7, 8, 9, 10]) b = tf.constant([1, 2, 3, 4, 5]) c = tf.constant(2) # 関数で計算 print(tf.math.mod(a, b)) print(tf.math.mod(a, c), "\n") # 演算子で計算 print(a % b) print(a % c)
【実行結果】 tf.Tensor([0 1 2 1 0], shape=(5,), dtype=int32) tf.Tensor([0 1 0 1 0], shape=(5,), dtype=int32) tf.Tensor([0 1 2 1 0], shape=(5,), dtype=int32) tf.Tensor([0 1 0 1 0], shape=(5,), dtype=int32)
マイナス tf.negative
Tensorをマイナスするには、以下のようにtf.negativeまたは-演算子を用います。
import tensorflow as tf a = tf.constant([1, 2, 3, 4, 5]) b = tf.constant(2) # 関数で計算 print(tf.negative(a)) print(tf.negative(b), "\n") # 演算子で計算 print(-a) print(-b)
【実行結果】 tf.Tensor([-1 -2 -3 -4 -5], shape=(5,), dtype=int32) tf.Tensor(-2, shape=(), dtype=int32) tf.Tensor([-1 -2 -3 -4 -5], shape=(5,), dtype=int32) tf.Tensor(-2, shape=(), dtype=int32)
他にも色々ある数学の関数
TensorFlowでは、各種数学関数がtf.mathにて実装されています。上記で紹介した数値計算はその中のごく一部で、他にも多くの数学の関数が用意されています。
tf.mathの公式ドキュメントのこちらを見ると一覧とリンクが確認できます。自分が必要としている関数がないか探すときに使用してみてください。
まとめ
Googleによって開発されている機械学習ライブラリであるTensorFlowで、Tensorを用いた数値計算をする方法を紹介しました。
今回紹介したのは加算等の最もシンプルなものですが、TensorFlowではtf.mathに様々な数学の関数が用意されています。目的にあわせて確認してうまく活用してもらえるとよいかと思います。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。