Tensorflow 张量流量损失最小化型误差

Tensorflow 张量流量损失最小化型误差,tensorflow,Tensorflow,我在TensorFlow中实现了一个损失函数,它计算均方误差。用于计算目标的所有张量均为float64类型,因此损失函数本身为dtype float64。特别是, print cost ==> Tensor("add_5:0", shape=TensorShape([]), dtype=float64) 然而,当我试图最小化时,我得到了一个关于张量类型的值误差: GradientDescentOptimizer(learning_rate=0.1).minimize(cost) ==&g

我在TensorFlow中实现了一个损失函数,它计算均方误差。用于计算目标的所有张量均为float64类型,因此损失函数本身为dtype float64。特别是,

print cost
==> Tensor("add_5:0", shape=TensorShape([]), dtype=float64)
然而,当我试图最小化时,我得到了一个关于张量类型的值误差:

GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
==> ValueError: Invalid type <dtype: 'float64'> for add_5:0, expected: [tf.float32].

目前,
tf.train.GradientDescentOptimizer
只对32位浮点变量和丢失值进行培训

但是,内核似乎是针对双精度值实现的,因此应该可以在您的场景中进行训练

快速解决方法是定义一个子类,该子类还支持
tf.float64
值:

class DoubleGDOptimizer(tf.train.GradientDescentOptimizer):
  def _valid_dtypes(self):
    return set([tf.float32, tf.float64])
…然后使用DoubleGDOptimizer代替
tf.train.GradientDescentOptimizer

编辑:您需要以
tf.constant(learning\u rate,tf.float64)的形式传入学习率
才能进行此操作


N.B.这不是一个受支持的界面,将来可能会发生变化,但团队意识到优化双精度浮动的愿望,并打算提供内置解决方案。)

现在似乎不起作用(tf v0.6)<代码>类型错误:“ApplyGradientDescent”Op的输入“alpha”的类型float32与参数“var”的类型float64不匹配。
感谢您指出这一点。我对答案进行了修改。但这似乎不适用于像亚当这样的(更老练的)乐观主义者。。。
class DoubleGDOptimizer(tf.train.GradientDescentOptimizer):
  def _valid_dtypes(self):
    return set([tf.float32, tf.float64])