Модель с BatchNormalization: застойные потери теста

Я написал нейронную сеть, используя Keras. Содержит слои BatchNormalization.

Когда я тренировался с model.fit, все было отлично. При обучении с использованием тензорного потока, как описано здесь, обучение проходит хорошо, но этап проверки всегда дает очень плохую производительность, и он быстро насыщается (точность возрастает до 5%, 10%, 40%, 40%, 40%...; потеря тоже застойная).

Мне нужно использовать тензор потока, потому что он обеспечивает большую гибкость в части мониторинга обучения.

Я сильно подозреваю, что это как-то связано со слоями BN и / или с тем, как я вычисляю результаты испытаний (см. Ниже)

feed_dict = {x: X_valid,
            batch_size_placeholder: X_valid.shape[0],
            K.learning_phase(): 0,
            beta: self.warm_up_schedule(global_step)
            }
if self.weights is not None:
    feed_dict[weights] = self.weights
acc = accuracy.eval(feed_dict=feed_dict)

Есть ли что-то особенное, что нужно сделать при вычислении точности проверки модели, содержащей слои Keras BatchNormalizatin?

Заранее спасибо!

1 ответ

На самом деле я узнал о training аргумент __call__ метод BatchNormalization слой

Итак, что вы можете сделать, когда создаете экземпляр слоя, просто:

x = Input((dim1, dim2))
h = Dense(dim3)(x)
h = BatchNormalization()(h, training=K.learning_phase())

А при оценке производительности по проверке набора:

feed_dict = {x: X_valid,
             batch_size_placeholder: X_valid.shape[0],
             K.learning_phase(): 0,
             beta: self.warm_up_schedule(global_step)
             }
acc = accuracy.eval(feed_dict=feed_dict)
summary_ = merged.eval(feed_dict=feed_dict)
test_writer.add_summary(summary_, global_step)
Другие вопросы по тегам