微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tensorflow-Custom函数:ValueError:没有为任何变量提供渐变

如何解决Tensorflow-Custom函数:ValueError:没有为任何变量提供渐变

当我在自定义损失函数中使用K.round函数时,出现以下错误

ValueError: No gradients provided for any variable: ['sequential_20/dense_240/kernel:0','sequential_20/dense_240/bias:0','sequential_20/dense_241/kernel:0','sequential_20/dense_241/bias:0','sequential_20/dense_242/kernel:0','sequential_20/dense_242/bias:0','sequential_20/dense_243/kernel:0','sequential_20/dense_243/bias:0','sequential_20/dense_244/kernel:0','sequential_20/dense_244/bias:0','sequential_20/dense_245/kernel:0','sequential_20/dense_245/bias:0','sequential_20/dense_246/kernel:0','sequential_20/dense_246/bias:0','sequential_20/dense_247/kernel:0','sequential_20/dense_247/bias:0','sequential_20/dense_248/kernel:0','sequential_20/dense_248/bias:0','sequential_20/dense_249/kernel:0','sequential_20/dense_249/bias:0','sequential_20/dense_250/kernel:0','sequential_20/dense_250/bias:0','sequential_20/dense_251/kernel:0','sequential_20/dense_251/bias:0'].

这是我的工作代码示例:(如果我在不使用K.round的情况下使用损失函数,那就可以了)

def adjusted_loss(y_true,y_pred): 
    y_pred = K.round(y_pred / 1000) * 1000
    loss = y_pred - y_true
    return loss

model = tf.keras.Sequential()
model.add(layers.Dense(1,activation = LeakyReLU()))
model.compile(loss= adjusted_loss,optimizer= opt)

有什么建议吗?

谢谢

解决方法

这种情况下的问题很简单,K.round不是可微函数,因此不提供梯度(结果为无),您不能将任何不可微函数用作损失函数

,

问题已解决。这与Tensorflow版本有关。 K.round支持2.2.0。我的问题在2.1.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。