Мне нужна функция потерь с этой регуляризацией: для каждого прогноза, если прогнозируемая точка имеет норму ниже 0,9 или больше 1, я хочу применить регуляризацию.
Итак, я написал это:
def custom_loss(y_true, y_pred):
ret = keras.losses.mean_squared_error(y_true, y_pred)
n = tf.norm(y_pred, axis = 1)
intern_circle_distance = n - 0.9
return tf.where(tf.logical_and(tf.greater(intern_circle_distance, 0),
tf.less(intern_circle_distance, 0.1))
ret,
ret*2)
Когда я использую это в файле model.com, возвращается ошибка:
Фигуры должны быть одинакового ранга, но равны 0 и 1 для 'loss_71 / Hyper_loss / Select' (op: 'Select') с входными фигурами: [?], [], [].
Я попробовал потерю вне среды Кераса, и, похоже, это работает.
Например это:
a = tf.constant([[-1.0, 1.5]])
n = a - 1
K.eval(tf.where(tf.logical_and(tf.greater(n, 0)),
tf.less(n, 2)),
a, a*2))
возвращает мне Тензор [-2., 1,5]
Почему он работает вне функции потери керасы и не работает внутри функции потери керасы?
Как это может работать внутри функции потери keras?