【问题标题】:Use Hamming Distance Loss Function with Tensorflow GradientTape: no gradients. Is it not differentiable?使用带有 Tensorflow GradientTape 的汉明距离损失函数:没有渐变。是不可微分的吗?
【发布时间】:2020-06-10 17:38:14
【问题描述】:

我正在使用 Tensorflow 2.1 和 Python 3,按照教程“Tensorflow - Custom training: walkthrough”创建我的自定义训练模型。

我正在尝试对我的损失函数使用汉明距离:

import tensorflow as tf
import tensorflow_addons as tfa

def my_loss_hamming(model, x, y):
  global output
  output = model(x)

  return tfa.metrics.hamming.hamming_loss_fn(y, output, threshold=0.5, mode='multilabel')


def grad(model, inputs, targets):
  with tf.GradientTape() as tape:
      tape.watch(model.trainable_variables)
      loss_value = my_loss_hamming(model, inputs, targets)

  return loss_value, tape.gradient(loss_value, model.trainable_variables)

当我调用它时:

loss_value, grads = grad(model, feature, label)
optimizer.apply_gradients(zip(grads, model.trainable_variables))

grads 变量是一个包含 38 个无的列表。

我得到了错误:

No gradients provided for any variable: ['conv1_1/kernel:0', ...]

有没有什么方法可以使用汉明距离而不“中断渐变胶带注册的渐变链”?

【问题讨论】:

    标签: python tensorflow keras deep-learning eager-execution


    【解决方案1】:

    抱歉,如果我说的很明显,但反向传播作为神经网络拟合算法的工作方式是通过梯度 - 例如对于每批训练数据,如果您将特定的可训练权重移动非常小的量delta,您会计算损失函数将改善/降低多少。

    汉明损失在定义上是不可微的,因此对于可训练重量的小动作,您永远不会体验到损失的任何变化。我想它只是被添加用于训练模型性能的最终测量,而不是用于训练。

    如果您想通过反向传播训练神经网络,您需要使用一些可微损失 - 这样可以帮助模型将权重向正确的方向移动。有时人们会使用不同的技术来平滑这些损失,例如减少 Hamming 并创建近似值 - 例如在这里,它可能会惩罚更接近目标答案的较少预测,而不是对高于阈值的所有内容给出 1,对其他所有内容给出 0。

    【讨论】:

    • 感谢您的回答。这个问题与这个问题有关:datascience.stackexchange.com/q/75758/31726 在这里我解释了我正在尝试做的事情。还有另一个math.stackexchange.com/q/3713624/193243,在那里你会知道我为什么使用汉明距离。再次感谢。
    • 您的方法绝对没有问题。正如我所说,如果你想将它用于训练,你只需要平滑你的损失函数。
    • 谢谢,但我不知道如何将我的方法用作可微损失函数。
    • 还有一个汉明距离损失函数,hamming_loss_fn,tensorflow.org/addons/api_docs/python/tfa/metrics/hamming/…。这也是不可区分的吗?谢谢。
    • 从您的解释看来,您的输出具有(BatchSize, FlattenedPixelsNxM) 的形状,并且目标是相同的形状,具有 0/1 值描述图像上的区域。而threshold=0.5 hamming loss 实际上只是通过将每个 >0.5 的值替换为 1 并将每个值
    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2017-09-10
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多