如何在tensorflow中设置rmse成本函数

how to set rmse cost function in tensorflow

我在 tensorflow 中有成本函数。

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

我正在尝试 this example。如何将其更改为 rmse 成本函数?

(1) 你确定你需要这个吗?最小化 l2 loss 将得到与最小化 RMSE 误差相同的结果。 (走一遍数学:你不需要取平方根,因为对于 x>0 最小化 x^2 仍然最小化 x,并且你知道一堆平方和是正的。最小化 x*n 最小化 x对于常量 n).

(2)如果需要知道RMSE误差的数值,那么直接从definition of RMSE实现:

tf.sqrt(tf.reduce_sum(...)/n)

(您需要知道或计算 n - 总和中的元素数,并在对 reduce_sum 的调用中适当设置缩减轴)。

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

并稍微简化(TensorFlow 重载了最重要的运算符):

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

root mean square error的公式是:

在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的值,你可以使用这个函数。

现在我们有 tf.losses.mean_squared_error

因此,

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

对于想要将 RMSE 作为指标实施的人

rmse = tf.keras.metrics.RootMeanSquaredError()

如何使用它的例子

model.compile(optimizer=optimizer, loss='mean_squared_error',
              metrics=[rmse,'mae'])