1. ホーム
  2. python

[解決済み] TensorFlowにおけるさまざまな分割の種類

2022-03-04 19:24:03

質問

私はTensorFlowの超初心者です。そこで、TensorFlowのさまざまな種類の分割について、以下の記事で知りました。 こちら . コードは以下のようになります。

a = tf.constant([2, 2], name='a')
b = tf.constant([[0, 1], [2, 3]], name='b')
with tf.Session() as sess:
    print(sess.run(tf.div(b, a)))             ⇒ [[0 0] [1 1]]
    print(sess.run(tf.divide(b, a)))          ⇒ [[0. 0.5] [1. 1.5]]
    print(sess.run(tf.truediv(b, a)))         ⇒ [[0. 0.5] [1. 1.5]]
    print(sess.run(tf.floordiv(b, a)))        ⇒ [[0 0] [1 1]]
    print(sess.run(tf.realdiv(b, a)))         ⇒ # Error: only works for real values
    print(sess.run(tf.truncatediv(b, a)))     ⇒ [[0 0] [1 1]]
    print(sess.run(tf.floor_div(b, a)))       ⇒ [[0 0] [1 1]]

私はプログラミング言語には疎いので、"computes division python style"などのドキュメントを理解することが出来ませんでした。もしどなたか、それぞれの違いや実用面について説明していただけるとありがたいです。

どのように解決するのですか?

tf.div - Python v2 の除算セマンティクスを適用します。例えば、両方の引数が整数の場合は整数除算 ("floor division") を使い、引数が浮動小数点数または複素数の場合は通常の浮動小数点数除算を使用します。結果は、両方の引数が整数の場合は整数、それ以外は浮動小数点になります。

tf.div(7, 5)
# >>> 1
tf.div(-7, 5)
# >>> -2
tf.div(7.0, 5.0)
# >>> 1.4

tf.truediv - 例えば、両方の引数が整数の場合、それらはまず float 型にキャストされ (ドキュメントのウェブページに、どの整数がどの float 型に変換されるかが書かれています)、それから通常の浮動小数点数の除算が適用されます。

tf.truediv(7, 5)
# >>> 1.4
tf.truediv(-7, 5)
# >>> -1.4
tf.truediv(7.0, 5.0)
# >>> 1.4

tf.divide(x,y) は、基本的に x/y の動作に依存します。 / 演算子を使用します。

tf.floordiv tf.floor_div と同じ結果を返します。 tf.div 両引数が整数で tf.floor(tf.div(x,y)) は、両方の引数が浮動小数点数である場合。

tf.floordiv(7, 5)
# >>> 1
tf.floordiv(-7, 5)
# >>> -2
tf.floordiv(7.0, 5.0)
# >>> 1.0
tf.floordiv(-7.0, 5.0)
# >>> -2.0

tf.realdiv - 通常の浮動小数点数の除算では、この演算は tf.truediv は、引数をキャストした後に呼び出されます。

tf.truncatediv - は、除算の結果を 0 に丸めます。

tf.truncatediv(7, 5)
# >>> 1
tf.truncatediv(-7, 5)
# UNLIKE tf.floordiv and tf.div
# >>> -1