У меня есть функция стоимости в tenorflow.
activation = tf.add(tf.mul(X, W), b)
cost = (tf.pow(Y-y_model, 2)) # use sqr error for cost function
Я пробую этот пример. Как я могу изменить его на функцию стоимости?
У меня есть функция стоимости в tenorflow.
activation = tf.add(tf.mul(X, W), b)
cost = (tf.pow(Y-y_model, 2)) # use sqr error for cost function
Я пробую этот пример. Как я могу изменить его на функцию стоимости?
tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(targets, outputs))))
И немного упрощенный (TensorFlow перегружает наиболее важные операторы):
tf.sqrt(tf.reduce_mean((targets - outputs)**2))
Формула для среднеквадратической ошибки :
Способ реализовать это в TF - tf.sqrt(tf.reduce_mean(tf.squared_difference(Y1, Y2)))
.
Важно помнить, что нет необходимости сводить к минимуму потери RMSE с помощью оптимизатора. С тем же результатом вы можете свести к минимуму только tf.reduce_mean(tf.squared_difference(Y1, Y2))
или даже tf.reduce_sum(tf.squared_difference(Y1, Y2))
, но поскольку у них меньший график операций, они будут оптимизированы быстрее.
Но вы можете использовать эту функцию, если вы просто хотите узнать значение RMSE.
(1) Вы уверены, что вам это нужно? Минимизация l2 loss даст вам тот же результат, что и минимизация ошибки RMSE. (Пройдите по математике: вам не нужно принимать квадратный корень, так как минимизация x ^ 2 все еще минимизирует x при x > 0, и вы знаете, что сумма кучки квадратов положительна. Минимизация x * n минимизирует x для константы n).
(2) Если вам нужно знать числовое значение ошибки RMSE, тогда реализуйте его непосредственно из определения RMSE:
tf.sqrt(tf.reduce_sum(...)/n)
(Вам нужно знать или рассчитать n - количество элементов в сумме и правильно установить ось редукции в вызове reduce_sum).
Теперь у нас есть tf.losses.mean_squared_error
Поэтому
RMSE = tf.sqrt(tf.losses.mean_squared_error(prediction, label))