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)