gpt4 book ai didi

python - Tensorflow 添加 float 给出额外的数字

转载 作者:行者123 更新时间:2023-11-28 17:04:08 25 4
gpt4 key购买 nike

所以我想知道为什么我在添加它们时没有得到下面两个 float 的总和。根据 float 的长度以及点之前是否有非零数字,结果有一个添加或减去的附加数字,或者它们只是没有被添加。例如下面的代码:

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

with tf.Graph().as_default():
a = tf.Variable(1, name="Var_a")
dx = tf.Variable(1.33333, name='dx')
dt = tf.Variable(5e-10, name='dt')
dz = tf.Variable(1.0, name='dz')


with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
a = dt+dx
a = a-dz
print dx.eval()
print dt.eval()
print (dt+dx).eval()
print (dx+dt).eval()
print a.eval()
writer = tf.summary.FileWriter("/tmp/tensorlog")
writer.add_graph(sess.graph)

给出以下结果:

>>>1.33333
>>>5e-10
>>>1.33333
>>>1.33333
>>>0.33333004

所以加法没有发生,减法也没有给出正确的结果。在此先感谢您对此的任何想法。

最佳答案

默认情况下,TensorFlow 变量是 32 位 float ,它们没有足够的精度来跟踪差异 dt,这相对于其余值来说太小了。使用 dtype=tf.float64 提高精度,您将看到正确的结果:

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

with tf.Graph().as_default():
a = tf.Variable(1, name="Var_a", dtype=tf.float64)
dx = tf.Variable(1.33333, name='dx', dtype=tf.float64)
dt = tf.Variable(5e-10, name='dt', dtype=tf.float64)
dz = tf.Variable(1.0, name='dz', dtype=tf.float64)


with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
a = dt+dx
a = a-dz
print dx.eval()
print dt.eval()
print (dt+dx).eval()
print (dx+dt).eval()
print a.eval()
writer = tf.summary.FileWriter("/tmp/tensorlog")
writer.add_graph(sess.graph)

输出:

1.33333
5e-10
1.3333300005
1.3333300005
0.33333000049999995

但是请注意,使用 tf.float64 而不是 tf.float32 值会在内存和时间方面产生成本,因此请使用 tf.float64 仅当您确实需要高精度时。通常,32 位浮点值精确到小数点后 7 位左右,而 64 位浮点值精确到小数点后 15 位左右。

关于python - Tensorflow 添加 float 给出额外的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52369174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com