我正在閱讀一些關于自定義損失函式的內容,tensorflow并且正在閱讀教程頁面中提供的示例(請參閱下面的鏈接)。
https://www.tensorflow.org/tutorials/customization/custom_training_walkthrough
這是鏈接中提供的簡單損失。
loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
def loss(model, x, y, training):
y_ = model(x, training=training)
return loss_object(y_true=y, y_pred=y_)
在這個例子之后,作者提到了Use the tf.GradientTape context to calculate the gradients used to optimize your model.
我的問題是為什么需要使用tf.GradientTape?不不tensorflow使用任何優化時,實際計算的梯度如Adam?
實際上,我還查看了此處發布的先前問題。
如何在 Tensorflow 中撰寫自定義損失函式?
您可以看到沒有一個答案使用tf.GradientTape. 我正在分享一個發布的答案,這對我來說很有意義。
def focal_loss(y_true, y_pred):
pt_1 = tf.where(tf.equal(y_true, 1), y_pred, tf.ones_like(y_pred))
pt_0 = tf.where(tf.equal(y_true, 0), y_pred, tf.zeros_like(y_pred))
custom_loss=kb.square((pt_1-pt_0)/10)
return custom_loss
model.compile(loss=focal_loss,
optimizer='adam',
metrics=['accuracy'])
相反,在另一個類似的問題中,所有答案都使用tf.GradientTape.
具有多個輸入的 Tensorflow 2.0 自定義損失函式
此刻,我有點困惑。有人可以解釋一下它的用途tf.GradientTape以及我應該何時考慮使用它嗎?
uj5u.com熱心網友回復:
這完全取決于您如何訓練模型。如果您正在使用model.fit來訓練您的模型,那么您不必顯式使用tf.GradientTape,但它仍在幕后使用!如果您定義了一個自定義訓練回圈,就像您參考的演練中的那樣,您將不得不使用tf.GradientTape,
使您能夠檢索層的可訓練權重相對于損失值的梯度。來源
現在關于您的問題:計算的梯度是形式上的偏導數或變化的度量,并且您的模型的優化器會根據這些梯度調整模型的各個權重。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/408861.html
標籤:
