在编写自定义损失函数时何时使用 tf.GradientTape
when to use tf.GradientTape during writing a custom loss function
我正在阅读 tensorflow
中有关自定义损失函数的一些内容,并且正在阅读教程页面中提供的示例(请参阅下面的 link)。
https://www.tensorflow.org/tutorials/customization/custom_training_walkthrough
这是link中提供的一个简单损失。
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
时实际上不会计算梯度吗?
其实我也看了之前贴在这里的一个问题
您可以看到 none 个答案使用 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
。
此刻,我有点困惑。有人可以解释一下 tf.GradientTape
有什么用,我什么时候应该考虑使用它?
这完全取决于您训练模型的方式。如果您使用 model.fit
来训练您的模型,那么您不必显式使用 tf.GradientTape
,但它仍在后台使用!如果您像您引用的演练中那样定义自定义训练循环,则必须使用 tf.GradientTape
,
enables you to retrieve the gradients of the trainable weights of the layer with respect to a loss value. Source
现在关于你的问题:计算出的梯度形式上是偏导数或变化的度量,你的模型的优化器会根据这些梯度调整模型的各个权重。
我正在阅读 tensorflow
中有关自定义损失函数的一些内容,并且正在阅读教程页面中提供的示例(请参阅下面的 link)。
https://www.tensorflow.org/tutorials/customization/custom_training_walkthrough
这是link中提供的一个简单损失。
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
时实际上不会计算梯度吗?
其实我也看了之前贴在这里的一个问题
您可以看到 none 个答案使用 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
。
此刻,我有点困惑。有人可以解释一下 tf.GradientTape
有什么用,我什么时候应该考虑使用它?
这完全取决于您训练模型的方式。如果您使用 model.fit
来训练您的模型,那么您不必显式使用 tf.GradientTape
,但它仍在后台使用!如果您像您引用的演练中那样定义自定义训练循环,则必须使用 tf.GradientTape
,
enables you to retrieve the gradients of the trainable weights of the layer with respect to a loss value. Source
现在关于你的问题:计算出的梯度形式上是偏导数或变化的度量,你的模型的优化器会根据这些梯度调整模型的各个权重。