tf.keras.backend.clip
не обрезает тензоры
Когда я использую tf.keras.backend.clip
внутри этой функции
def grads_ds(model_ds, ds_inputs,y_true,cw):
print(y_true)
with tf.GradientTape() as ds_tape:
y_pred = model_ds(ds_inputs)
print(y_pred.numpy())
logits_1 = -1*y_true*K.log(y_pred)*cw[:,0]
logits_0 = -1*(1-y_true)*K.log(1-y_pred)*cw[:,1]
loss = logits_1 + logits_0
loss_value_ds = K.sum(loss)
ds_grads = ds_tape.gradient(loss_value_ds,model_ds.trainable_variables,unconnected_gradients=tf.UnconnectedGradients.NONE)
for g in ds_grads:
g = tf.keras.backend.clip(g,min_grad,max_grad)
return loss_value_ds, ds_grads
Значение градиентов остается прежним (не обрезано).
Когда я использую tf.keras.backend.clip
внутри пользовательского обучения l oop, точно так же
for g in ds_grads:
g = tf.keras.backend.clip(g,min_grad,max_grad)
это не работает. Градиент, применяемый к переменным, не обрезается.
Однако, если я напечатаю g
в пределах l oop, тогда будет показано обрезанное значение.
Не могу понять, где находится проблема есть.