Мне интересно, является ли это серьезной ошибкой / недостатком в Керасе; использование пользовательских слоев с функциональным API приводит к отсутствию весов в trainable_variables
. Эти веса также не входят в «non_trainable_variables».
Но если этих весов нет в trainable_variables
, они существенно заморожены, поскольку только те веса получают обновления градиента.
Ошибку можно увидеть в этом Colab gist
https://colab.research.google.com/gist/Santosh-Gupta/766a27c1500a330cba6f479805dad27d/missingtrainablevarsinference.ipynb
В этой сущности для создания моделей используется библиотека transformers, поэтому ошибку легко увидеть. Для более детального просмотра приведенная ниже таблица создает все пользовательские слои с нуля
https://colab.research.google.com/gist/Santosh-Gupta/ec9f7c8a189a8d99e73d96fbe728aef8/model_weight_debug_scratch_public_inference.ipynb
Как вы можете видеть в записных книжках, обходной путь заключается в создавать модели, используя подклассы keras для создания моделей; в результате создания подклассов все веса появляются в trainable_variables
.
Однако у меня есть модели, которые я уже обучал с помощью функционального API. Я смотрел на это около месяца, насколько я могу судить, любая модель Keras, использующая настраиваемые подслои и функциональный API, подвержена этому. И мне интересно, есть ли какие-либо другие модели, которые я тренировал с пользовательскими слоями и функциональным API, которые могли скомпрометировать обучение
Я поставил проблему Github 24 дня go, но я не могу сказать, это
https://github.com/tensorflow/tensorflow/issues/40638
У меня есть крайние сроки для моделей, которые я обучил, поэтому мне очень любопытно, какова природа этого проблема, чтобы я мог точно сообщить о своих результатах, и мне интересно, есть ли какие-либо способы получить более полное представление об этой проблеме.