算術記号とTensorFlow関数の対応

はじめに

 数式をTensorFlowのモデルとして記述する際、演算記号がTensorFlowのどのAPIに対応しているかをまとめてみました。 

演算対象のテンソル\(x\)の定義

\[ x_{i,j} = \left( \begin{array}{cc} x_{1,1} & x_{1,2} & \cdots & x_{1,n} \\ x_{2,1} & x_{2,2} & \cdots & x_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m,1} & x_{m,2} & \cdots & x_{m,n} \\ \end{array} \right) (1 \leq i \leq m, 1 \leq j \leq n) \]

x = tf.constant([1., 2., 3., 4., 5., 6., 7., 8., 9.], shape=[3, 3])

 以降、下記の様な完全なプログラムに組み込んだときの出力結果もあわせて記載します。

import tensorflow as tf

x = tf.constant([1., 2., 3., 4., 5., 6., 7., 8., 9.], shape=[3, 3])
y = x  # この行を置き換えて確認します。

with tf.Session() as sess:
    print(sess.run(y))

 このプログラムを実行すると、下記の様な出力を得られます。

[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]]

tf.negative 符号反転

\[ y = – x \]

y = tf.negative(x)
# y = -x
# y = tf.multiply(-1., x)
[[-1. -2. -3.]
 [-4. -5. -6.]
 [-7. -8. -9.]]

tf.abs 絶対値

\[ y = |x| \]

y = tf.abs(x)
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]]

tf.reciprocal 逆数

\[ y = \frac{1}{x} \]

y = tf.inv(x)
[[ 1.          0.5         0.33333334]
 [ 0.25        0.2         0.16666667]
 [ 0.14285715  0.125       0.11111111]]

tf.square 2乗

\[ y = x^2 \]

y = tf.square(x)
[[  1.   4.   9.]
 [ 16.  25.  36.]
 [ 49.  64.  81.]]

tf.sqrt べき根

\[ y = \sqrt{x} \]

y = tf.sqrt(x)
[[ 0.99999994  1.41421342  1.73205078]
 [ 1.99999988  2.23606801  2.44948959]
 [ 2.64575124  2.82842684  3.        ]]

tf.rsqrt べき根の逆数

\[ y = \frac{1}{\sqrt{x}} \]

y = tf.rsqrt(x)
[[ 0.99999994  0.70710671  0.57735026]
 [ 0.49999997  0.44721359  0.40824828]
 [ 0.37796447  0.35355335  0.33333334]]

tf.exp 指数

\[ y = e^x \]

y = tf.exp(x)
[[  2.71828175e+00   7.38905621e+00   2.00855370e+01]
 [  5.45981522e+01   1.48413162e+02   4.03428802e+02]
 [  1.09663318e+03   2.98095801e+03   8.10308398e+03]]

tf.log 自然対数

\[ y = \log_e x \]

y = tf.log(x)
[[ 0.          0.69314718  1.09861231]
 [ 1.38629436  1.60943794  1.79175949]
 [ 1.94591022  2.07944155  2.19722462]]

tf.reduce_sum 総和

 reduce_sum はテンソルの任意の次元の要素を足し合わせて新しいテンソルを返します。何次元目を足し合わせるかは、第2引数またはreduction_indicesで指定します。指定がなければすべての次元で足し合わせて、1つの値を返します。

\(i\)(1次元目)で足し合わせ

\[ y = \sum_{i=1}^m x_{ij} \]

y = tf.reduce_sum(x, 0)
[12. 15. 18.]

\(j\)(2次元目)で足し合わせ

\[ y = \sum_{j=1}^n x_{ij} \]

y = tf.reduce_sum(x, 1)
[ 6. 15. 24.]

すべての次元で足し合わせ

\[ y = \sum_{i=1}^m \sum_{j=1}^n x_{ij} \]

y = tf.reduce_sum(x)
45.0

tf.reduce_prod 総乗

 reduce_sum はテンソルの任意の次元の要素をかけ合わせて新しいテンソルを返します。何次元目をかけ合わせるかは、第2引数またはreduction_indicesで指定します。指定がなければすべての次元でかけ合わせて、1つの値を返します。

\(i\)(1次元目)でかけ合わせ

\[ y = \prod_{i=1}^m x_{ij} \]

y = tf.reduce_prod(x, 0)
[ 28.  80. 162.]

\(j\)(2次元目)でかけ合わせ

\[ y = \prod_{j=1}^n x_{ij} \]

y = tf.reduce_prod(x, 1)
[  6. 120. 504.]

すべての次元でかけ合わせ

\[ y = \prod_{i=1}^m \prod_{j=1}^n x_{ij} \]

y = tf.reduce_prod(x)
362880.0

tf.reduce_mean 平均

 reduce_mean はテンソルの任意の次元の要素の平均を計算して、新しいテンソルを返します。何次元目の平均をとるかは、第2引数またはreduction_indicesで指定します。指定がなければすべての次元の要素の平均を計算して、1つの値を返します。

\(i\)(1次元目)の平均

\[ y = \frac{1}{m}\sum_{i=1}^m x_{ij} \]

y = tf.reduce_mean(x, 0)
[ 4.  5.  6.]

\(j\)(2次元目)の平均

\[ y = \frac{1}{n}\sum_{j=1}^n x_{ij} \]

y = tf.reduce_mean(x, 1)
[ 2.  5.  8.]

すべての次元の平均

\[ y = \frac{1}{mn}\sum_{i=1}^m \sum_{j=1}^n x_{ij} \]

y = tf.reduce_mean(x)
5.0

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください