При использовании 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.
Если у вас возникли проблемы с визуализацией потерь в тензорной доске, попробуйте отобразить графики в логарифмическом масштабе (одна из двух кнопок под графиками).