【问题标题】:Tensorflow-Custom Function: ValueError: No gradients provided for any variableTensorflow-自定义函数:ValueError:没有为任何变量提供梯度
【发布时间】:2020-10-19 09:41:20
【问题描述】:

我在自定义损失函数中使用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)

有什么建议吗?

谢谢

【问题讨论】:

    标签: python tensorflow keras loss-function


    【解决方案1】:

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

    【讨论】:

    • 问题已解决。这与 Tensorflow 版本有关。 2.2.0 支持 K.round。我的问题在2.1.0
    • 添加解决方案的答案并接受它,您实际上没有提供任何版本信息,我将答案留在这里,因为有些人可能会因为不支持的版本而面临这个问题并发现它有帮助
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 2020-10-31
      • 2020-09-30
      • 1970-01-01
      • 2021-09-08
      • 2021-04-17
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      相关资源
      最近更新 更多