Python 如何应用自定义渐变:类型转换错误

Python 如何应用自定义渐变:类型转换错误,python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我正在实现DDPG。我需要计算一个自定义梯度(演员权重的梯度,它最大化了评论家的输出),然后用优化器应用它。然而,由于某种原因,当我尝试运行它时,我得到了一个神秘的类型错误 我试图查看其他教程并搜索堆栈溢出,但找不到如何修复错误 这是一个获得错误的示例代码(实际计算更复杂,但得到的答案形式相同): 这个计算的梯度似乎是正确的。我希望优化器将其应用于网络,但在apply\u gradients调用中我得到以下错误: Tensor conversion requested dtype float32

我正在实现DDPG。我需要计算一个自定义梯度(演员权重的梯度,它最大化了评论家的输出),然后用优化器应用它。然而,由于某种原因,当我尝试运行它时,我得到了一个神秘的类型错误

我试图查看其他教程并搜索堆栈溢出,但找不到如何修复错误

这是一个获得错误的示例代码(实际计算更复杂,但得到的答案形式相同):

这个计算的梯度似乎是正确的。我希望优化器将其应用于网络,但在
apply\u gradients
调用中我得到以下错误:

Tensor conversion requested dtype float32_ref for Tensor with dtype float32: 'Tensor("Adam_24/dense_95/kernel/m/Initializer/zeros:0", shape=(6, 2), dtype=float32)'
以下是相关数据的一些测试打印结果:

打印(参与者输入)

打印(渐变操作)

打印(演员可训练重量)

[,]

正如错误所暗示的那样,
应用梯度
要求梯度为
float32\u ref
,而不是
float32

可能有多种方法可以通过显式转换来解决这个问题,但是将
grads
grad_op
分配给a可能会解决这个问题

这样做应该可以进行转换,但您可以在分配
tf.变量时指定
dtype=float32\u ref
,以确保这一点


是一篇关于两者区别的帖子。

你能给出一个具体的代码吗?我对tf很陌生。
Tensor conversion requested dtype float32_ref for Tensor with dtype float32: 'Tensor("Adam_24/dense_95/kernel/m/Initializer/zeros:0", shape=(6, 2), dtype=float32)'
[[-0.43979521  0.         -1.28554755  0.          0.94703663 -0.32112555]]
[<tf.Tensor 'gradients_2/dense_95/MatMul_grad/MatMul_1:0' shape=(6, 2) dtype=float32>, <tf.Tensor 'gradients_2/dense_95/BiasAdd_grad/BiasAddGrad:0' shape=(2,) dtype=float32>]
[array([[ 3.003665  ,  3.003665  ],
       [ 0.        ,  0.        ],
       [-2.2157073 , -2.2157073 ],
       [ 0.        ,  0.        ],
       [-0.8517535 , -0.8517535 ],
       [ 0.52394277,  0.52394277]], dtype=float32), array([1., 1.], dtype=float32)]
[<tf.Variable 'dense_95/kernel:0' shape=(6, 2) dtype=float32_ref>, <tf.Variable 'dense_95/bias:0' shape=(2,) dtype=float32_ref>]