Когда я устанавливаю is_training в False, я обнаруживаю, что точность моей модели очень низкая и полностью отличается от точности обучения (когда is_training - True). Я обнаружил, что это связано с уровнем пакетной нормы в Tensorflow, как описано здесь: https://github.com/tensorflow/tensorflow/issues/1122 и здесь: https://github.com/tensorflow/tensorflow/issues/7469
Один из Предлагаемое решение заключается в обновлении дополнительных update_ops вручную перед вычислением каждой потери с использованием контрольных зависимостей. Я сделал это ниже:
self.optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate)
extra_update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.variable_scope("fitting_operation", reuse=tf.AUTO_REUSE):
with tf.control_dependencies(extra_update_ops):
self.fitting_op = self.optimizer.minimize(self.losses[self.active_loss])
, но по какой-то причине моя точность проверки все еще ужасна, когда is_training имеет значение False. Я передаю переменную «fit_op» в мою модель, как показано ниже:
_, loss, dice = self.run_iteration(
feed_dict={self.placeholders['images']: batch['images'],
self.placeholders['labels']: batch['labels'], self.placeholders['is_training']: True,
},
op_list=[
self.fitting_op,
self.losses[self.active_loss],
self.outputs['dice'],
],
summaries=[],
Кто-нибудь знает, что я делаю неправильно с обновлением дополнительных операций для вычисления среднего значения и дисперсии пакета? Есть что-нибудь еще, что я могу попробовать? Спасибо.