当我做Deeplearning的作业时,我遇到了tf.cast一个奇怪的错误,就像这样:
test_1 = tf.cast(tf.square(2.0*300*400*64), tf.float32)
test_2 = tf.cast(tf.square(2*300*400*64), tf.float32)
test_3 = tf.cast(235929600000000, tf.float32)
sess.run([test_1, test_2, test_3])
但是,我得到的结果是这样的:
[235929600000000.0, -1543503900.0, 235929600000000.0]
我认为这可能是由float和int的位数不同引起的。有人可以给出原因吗?
答案 0 :(得分:2)
tf.square(2*300*400*64)
是(2^13 x 3^1 x 5^4)^2
然后
2^26 x 3^2 x 5^8 > 2^26 x 3^2 x 2^17
= 2^43 + 3^2
并且int32只能表示最大为2^32
的数字。尝试改用int64或uint64:
import numpy as np
test_2 = tf.cast(tf.square(np.int64(2*300*400*64)), tf.float32)
sess.run([test_1, test_2, test_3])
这不是tf.cast
中的错误。