Слой двойного назначения в той же модели - однажды обучаемая, однажды исправленная - PullRequest
0 голосов
/ 27 марта 2020

Контекст: Keras, Tensorflow 2, Python (см. Код ниже)

Я работаю над NN с исправлением ошибок на основе автоматического кодера и дополнительной информации.

Для 3000 входной бит, структура базового c автоэнкодера имеет вид:

data_uncorrected-> 3000 -> 512 -> 128 (*) -> 512 (#) -> 3000 (#) -> data_uncorrected

Для исправления ошибок я объединяю 10 объектов со скрытым слоем (*), обрабатываю его до нового слоя 128, а затем снова расширяю его:

128 (*) + 10 = 138 -> 128 -> 512 ($) -> 3000 ($) -> data_corrected

У меня есть это, но то, что я хотел бы сделать, это повторно использовать веса из слоев "#" в " $ "слои, что важно, не обучая их в" $ "части модели. Поэтому я хочу, чтобы слои "$" были такими же, как слои "#", но фиксированными. Цель этого состоит в том, чтобы модель, исправляющая ошибки, научилась исправлять скрытое представление на основе дополнительных данных, которые я предоставляю, и ничего больше.

Я могу сделать это, просто сначала обучив верхнюю часть, затем указав вторую модель отдельно, используя фиксированные слои + загруженные веса для $ слоев и обучив ее отдельно.

Но есть ли способ сделать это в одной модели?

Пример кода на колаб (который работает на TF1, но для этого это не имеет значения): https://colab.research.google.com/drive/1XxxB6EFeiGpaAQrBwPDPapD3LS2wX5uq

...