Types 为什么TensorFlow中tf.Variable([8.0],tf.float64)的类型是float 32而不是float 64?

Types 为什么TensorFlow中tf.Variable([8.0],tf.float64)的类型是float 32而不是float 64?,types,casting,tensorflow,Types,Casting,Tensorflow,(更新问题) 我认为原来的问题令人困惑,我找到了一个更简单的方法来问这个问题 #!/usr/bin/python import tensorflow as tf x = tf.Variable([2], tf.float32) print x.dtype 如果我们尝试上面的代码段,那么输出如下: <dtype: 'int32_ref'> 奇怪的是,我遇到了以下类型错误: TypeError:“ScatterNdUpdate”Op的输入“updates”的类型float32与参数

(更新问题) 我认为原来的问题令人困惑,我找到了一个更简单的方法来问这个问题

#!/usr/bin/python

import tensorflow as tf
x = tf.Variable([2], tf.float32)
print x.dtype
如果我们尝试上面的代码段,那么输出如下:

<dtype: 'int32_ref'>
奇怪的是,我遇到了以下类型错误:

TypeError:“ScatterNdUpdate”Op的输入“updates”的类型float32与参数“ref”的类型float64不匹配。

tf.Variable([8.0],tf.float64)
更改为下一行后,它工作了

updates = tf.Variable(np.array([8.0]).astype(np.float64), tf.float64)
因此,
tf.Variable([8.0],tf.float64)
的类型似乎不是tf.float64,尽管我明确指定了类型为tf.float64。谁能告诉我原因吗?谢谢大家!

更新:

使用tf.Variable()时使用数据类型

原始问题:

将ref类型设置为float32对我来说很有用


我猜,ScatterNdUpdate操作只适用于float32而不是float64。

原因很简单:您的代码创建了一个可训练的
tf.Variable
(您的
tf.float64
对于
可训练的
参数被解释为
True
。如果您只添加
dtype
,它将起作用:

    updates = tf.Variable([8.0], dtype=tf.float64)
事实上,也有类似的情况

ref = tf.Variable(np.arange(0, 12).reshape((4, 3)).astype(np.float32))
ref = tf.Variable(np.arange(0, 12).reshape((4, 3)),dtype=tf.float32)
    updates = tf.Variable([8.0], dtype=tf.float64)