--------------------------------------- обновленные данные ------- ---------------------------
Я сравнил параметры слоя 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)