当我阅读一些Tensorflow源代码时,我发现了这一点:
if tf_dtype.is_floating:
if spec.dtype == np.float64 and np.any(np.isinf(high - low)):
# The min-max interval cannot be represented by the np.float64. This is a
# problem only for np.float64, np.float32 works as expected.
# Spec bounds are set to read only so we can't use argumented assignment.
low = low / 2 # pylint: disable=g-no-augmented-assignment
high = high / 2 # pylint: disable=g-no-augmented-assignment
return rng.uniform(
low,
high,
size=spec.shape,
).astype(spec.dtype)
我对python不太熟悉。上面的代码看起来非常有趣,这意味着在操作时
low = low / 2
high = high / 2
将使新的low
和high
的dtype成为float32。但是当我在python终端中尝试这个
>>> a = np.array([2.0], dtype=np.float64)
>>> a.dtype
dtype('float64')
>>> b = a/2
>>> b.dtype
dtype('float64')
事情看起来不像这样。代码源是here,在第42行。有人可以解释吗?谢谢。
答案 0 :(得分:0)
不。
这似乎是解决np.float64数组中最小值和最大值之间的间隔问题的解决方法。张量流代码不会返回np.float32,而是会计算正确的值并使用原始类型返回它。
此外,从您的代码段来看,您在终端上运行的代码使用的是纯numpy,并且在tensorflow库附近没有任何地方,因此不会从tensorflow中重现任何奇怪的行为。
答案 1 :(得分:0)
不。要重新缩放为其他数据类型,可以使用 normalization :
zero_to_one = np.divide(old_val/np.amax(old_val)) # normalizes to 0 - 1
new_range = zero_to_one * max_val_of_new_dtype
new_range = np.array(new_range, dtype='desired dtype')