При использовании RMSE потерь в TensorFlow я получаю очень маленькие значения потерь smalerl чем 1

Здравствуйте, у меня есть сеть, которая производит logits / output, как это:

logits = tf.placeholder(tf.float32, [None, 128, 64, 64]) // outputs
y = tf.placeholder(tf.float32, [None, 128, 64, 64]) // ground_truth, targets

-> Значения истинной земли уменьшены с [0, 255] to [0, 1] чтобы увеличить производительность, как я прочитал, лучше использовать диапазон [0, 1]

Теперь я хочу рассчитать RMSE / EuclideanLoss следующим образом:

loss = tf.reduce_mean(tf.square(logits - y))

или же

loss = tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(y, logits))))

не уверен, какой из них лучше.

При этом мои значения потерь начинаются примерно с 1. а затем быстро спуститься к 2.5e-4, Когда я использую EuclideanLoss в Caffe для той же сети мои значения потерь начинаются примерно с 1000 и спускается к 200, Я делаю что-то не так в Tensorflow или почему значения потерь так малы? Я не могу реально отслеживать значения потерь в tensorboard так как они такие маленькие. Может кто-нибудь мне помочь?

1 ответ

Решение

Первая потеря, которую вы предлагаете, является лучшей (вторая вносит ненужную sqrt).

Значения, равные или меньшие 1, кажутся единственно возможными значениями, поскольку диапазон значений, которые вы предоставляете, находится в пределах 0 и 1, поэтому самая большая возможная ошибка - 1.

Если у вас возникли проблемы с визуализацией потерь в тензорной доске, попробуйте отобразить графики в логарифмическом масштабе (одна из двух кнопок под графиками).

Другие вопросы по тегам