Я пытаюсь написать собственную потерю в Tensorflow v2, для простоты предположим, что я использую среднеквадратичную потерю следующим образом:
loss_object = tf.keras.losses.MeanSquaredError()
def loss(model, x, y, training):
# training=training is needed only if there are layers with different
# behavior during training versus inference (e.g. Dropout).
y_ = model(x, training=training)
return loss_object(y_true=y, y_pred=y_)
Теперь я знаю, что Tensorflow выполняет автоматизации c дифференцирование .
Но я хочу указать свой пользовательский градиент , в алгоритме BackPropagation, если мы используем MSE, мы должны сделать следующее
\ frac {\ частичный E} {\ частичный w} = \ frac {\ частичный E} {\ частичный y_i} \ frac {\ частичный y_i} {\ частичный net_i} \ frac {\ частичный net_i} {\ частичный w}
\ frac {\ частичный E} {\ частичный w} = (y - \ hat {y}) * D (активация) * x
Возможно ли в Keras заменить (y - \ hat {y}) с (у - р) где p
- тензор, который передается во время обучения перед применением градиентов.