Как установить функцию rmse cost в тензорном потоке

У меня есть функция стоимости в tenorflow.

activation = tf.add(tf.mul(X, W), b)
cost = (tf.pow(Y-y_model, 2)) # use sqr error for cost function

Я пробую этот пример. Как я могу изменить его на функцию стоимости?

Ответ 1

tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(targets, outputs))))

И немного упрощенный (TensorFlow перегружает наиболее важные операторы):

tf.sqrt(tf.reduce_mean((targets - outputs)**2))

Ответ 2

Формула для среднеквадратической ошибки :

enter image description here

Способ реализовать это в 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.

Ответ 3

(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).

Ответ 4

Теперь у нас есть tf.losses.mean_squared_error

Поэтому

RMSE = tf.sqrt(tf.losses.mean_squared_error(prediction, label))