使用TensorFlow并使用NumPy中的文件加载方法时,似乎可以将所有内容指定为双精度:
np.loadtxt(..., dtype=np.float64)
tf.placeholder(tf.float64...)
tf.Variable(..., dtype=tf.float64...)
NumPy和TensorFlow具有单独的数据类型值。
如果您说np.loadtxt(..., dtype=tf.float64)
它失败并显示错误消息。好的,NP是在TF之前编写的,因此它不了解TF数据类型值。
另一方面,如果你说tf.placeholder(np.float64...)
,它似乎工作正常。嗯?好吧,TF是在NP之后编写的,也许它被编程为理解NP数据类型值。但是,为什么它首先有自己独立的数据类型值而不是仅仅使用NP?
就TF而言,两者之间的区别是什么?可以在任何地方使用np.float64
,还是会导致问题? (我问的原因是,我想在程序的开头设置一个参数,你可以通过改变一行在单精度和双精度之间切换,如果你确实可以使用{{{} 1}}无处不在。)
答案 0 :(得分:2)
NumPy的dtype
和TensorFlow的DType
实际上是不同的东西(基本上,TensorFlow的DType
只是内部enum
的值,而NumPy's dtype
s are actual objects。)因此,NumPy不了解TensorFlow DType
。虽然有兼容的对。您可以通过其属性is_numpy_compatible
了解您的DType
是否与NumPy兼容。 TensorFlow接受NumPy dtype
,因为他们通过as_dtype
方法清除初始化方法中的dtype
参数输入,该方法也接受NumPy dtype
,将它们转换为正确的TensorFlow { {1}}值。
所以,长话短说:你基本上可以在任何地方传递DType
和np.float64
,TensorFlow会妥善处理这个问题。