потеря становится намного больше при установке is_training = False в слое BN - PullRequest
0 голосов
/ 18 июня 2020

--------------------------------------- обновленные данные ------- ---------------------------

Я сравнил параметры слоя BN до и после декомпозиции и обнаружил проблему так пожалуйста, go и ответьте на этот вопрос: введите здесь описание ссылки


Я пытаюсь разложить веса сети на два тензорных потока с помощью SVD, а затем поместить один сверточный слой в два сверточных слоя, в то время как другой компонент включает в себя слой BN одинаковым.

Перед обучением (точной настройкой) точность разложенной сети резко падает по сравнению с исходной.

При обучении , Я установил is_training = False, чтобы слои BN оставались неизменными, чтобы я мог сравнивать разложенную сеть и исходную.

Но вот и проблема. Когда точная настройка начинается с is_training = False, потери вырастут с 0.x до 6,9, а затем останутся на уровне 6,9, а точность после точной настройки упадет почти до 0,1% (то есть для неподготовленной модели).

Я пытался уменьшить скорость обучения, но это не сработало.

А затем я установил is_training = True, и это сработало!

Так мне интересно, почему? Разве я не могу просто не обучать слой BN во время тонкой настройки? В противном случае сравнивать разложенную сеть и исходную будет некорректно.

Проблема должна быть внутри слоя BN? Может быть, что-то не так с моим кодированием слоя BN? Я вставляю код BN ниже

    tensor_go_next = tf.contrib.layers.batch_norm(tensor_go_next, decay=0.9, center=True, scale=True, epsilon=1e-9,
                                              updates_collections=tf.GraphKeys.UPDATE_OPS,
                                              is_training=is_training, scope=name_bn_scope)
...