TensorFlow中不同类型的分区

时间:2018-05-29 17:43:56

标签: python tensorflow

我对TensorFlow很新。所以我在here的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]]

由于我是编程语言的菜鸟,我无法理解他们的一些文档,包括“计算分区python风格”等等。如果有人可以解释所有和实际方面之间的差异,我将不胜感激。

1 个答案:

答案 0 :(得分:10)

tf.div - 执行python v2除法语义,例如如果两个参数都是整数,则使用整数除法(也称为“floor division”),如果参数是浮点数或复数,则使用正常的浮点除法。如果两个参数都是整数,则结果为整数,否则为float。

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

tf.truediv - 强制执行python v3除法语义,例如如果两个参数都是整数,则首先将它们转换为float类型(文档网页指定将哪种类型的整数转换为哪种类型的float)然后应用正常的浮点除法:

x/y

tf.divide(x,y)本质上会调用/,因此结果取决于tf.floor(tf.div(x,y))运算符在执行除法的环境中的行为。

如果两个参数都是整数,则

tf.floordivtf.floor_div返回与tf.div相同的结果,如果两个参数都是浮点数,则返回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.truncatediv(7, 5)
# >>> 1
tf.truncatediv(-7, 5)
# UNLIKE tf.floordiv and tf.div
# >>> -1

tf.realdiv - 正常浮点除法,这是tf.truediv在转换其参数后调用的操作。

tf.truncatediv - 将除法结果舍入为零:

t = timer(0, 30000);
sub: Subscription;

initialize(): void {
    this.sub = this.t.subscribe(() => this.refresh());
}

refreshTimer(): void {
    this.sub.unsubscribe();
    this.initialize();
}