Как сохранить не обучаемые переменные в контрольной точке tf.Estimator?

Я пытаюсь включить плотный слой, который нельзя обучить и инициализировать как единичную матрицу, как часть моего Оценщика тензорного потока. Интуиция заключается в том, чтобы этот плотный слой проходил через свои входные данные во время стандартного обучения и после него выполнялся шаг точной настройки. Суть в том, что я не хочу, чтобы эти веса обновлялись вообще во время первого раунда, только во время тонкой настройки.

Я могу сделать несколько вещей, чтобы сделать эти веса необучаемыми, в том числе используя обучаемый аргумент в конструкторе Dense или отфильтровывая что-либо с плотным в его имени перед передачей в MomentumOptimizer.compute_gradients().

Но в любом случае (сделать плотный не обучаемый или просто не передавать его оптимизатору), tf выдаст ошибку, говорящую, что он не может найти ключ, связанный с плотным слоем.

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

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

NotFoundError (см. Выше для отслеживания): плотный ключ /kernel/Momentum не найден в контрольной точке

1 ответ

Я отвечу на свой вопрос здесь, потому что он не был сразу очевиден для меня, так как документация tf, кажется, не проясняет это. Если вы хотите ввести новую обучаемую переменную, то в дальнейшем она должна быть принципиально другой моделью. Таким образом, чтобы выполнить тонкую настройку существующих весов, эти существующие веса в новой модели должны быть определены из настроек теплого старта.

Так что тренируйте модель, условно не включая слой тонкой настройки, когда запускается функция модели вашего оценщика. Обучите существующую модель, а затем создайте другую отдельную модель. Технически это просто означает, что вам нужно использовать новый каталог моделей, но настройки горячего запуска должны указывать на модель, которую вы предварительно обучали.

При точной настройке функция вашей модели должна условно включать слои точной настройки, но она должна восстанавливать весовые коэффициенты с предыдущего запуска, устанавливая параметры теплого запуска для просмотра каталога предыдущей модели.

Другие вопросы по тегам