[英]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.