簡體   English   中英

使用漢明距離損失 Function 和 Tensorflow GradientTape:無梯度。 是不可微分的嗎?

[英]Use Hamming Distance Loss Function with Tensorflow GradientTape: no gradients. Is it not differentiable?

I'm using Tensorflow 2.1 and Python 3, creating my custom training model following the tutorial " Tensorflow - Custom training: walkthrough ".

我正在嘗試對我的損失使用漢明距離 function:

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', ...]

有沒有什么方法可以使用漢明距離而不“中斷漸變膠帶注冊的漸變鏈”?

抱歉,如果我說的很明顯,但是反向傳播作為神經網絡的擬合算法的工作方式是通過梯度 - 例如,對於每批訓練數據,您計算 function 損失的多少,如果您移動特定的可訓練數據重量由一個非常小的量delta

根據定義,漢明損失是不可微的,因此對於可訓練權重的小幅移動,您將永遠不會體驗到損失的任何變化。 我想它只是被添加用於訓練模型性能的最終測量,而不是用於訓練。

如果你想通過反向傳播訓練神經網絡,你需要使用一些可微的損失——這樣可以幫助 model 將權重向正確的方向移動。 有時人們使用不同的技術來平滑這種損失,例如更少的漢明並創建近似值 - 例如,這里可能會懲罰更接近目標答案的更少預測,而不是對高於閾值的所有內容給出 1,對其他所有內容給出 0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM