Tensorflow slim batch_norm control_dependencies не работает - PullRequest
0 голосов
/ 01 февраля 2020

Когда я устанавливаю 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=[],

Кто-нибудь знает, что я делаю неправильно с обновлением дополнительных операций для вычисления среднего значения и дисперсии пакета? Есть что-нибудь еще, что я могу попробовать? Спасибо.

...