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

Структура модели выглядела следующим образом:

При попытке сохранить модель с указанной выше структурой модели я столкнулся со следующей ошибкой:

Файл «.venv/lib/python3.8/site-packages/tensorflow/python/training/tracking/graph_view.py», строка 381, в _fill_object_graph_proto
child_proto.local_name = child.name
TypeError: None имеет тип NoneType, но ожидается один из: bytes, unicode

При попытке объединить отдельные пользовательские слои выше в один, а затем сохранить модель, это привело к отдельной ошибке.

Файл «.venv/lib/python3.8/site-packages/tensorflow/python/training/tracking/graph_view.py», строка 62, в _escape_local_name
return (name.replace(_ESCAPE_CHAR, _ESCAPE_CHAR + _ESCAPE_CHAR)< br /> AttributeError: объект «NoneType» не имеет атрибута «заменить»

Поиск в Интернете дал результаты от других пользователей, столкнувшихся с этими проблемами.

Простое исправление, которое решило проблему, состояло в том, чтобы предоставить отдельное имя для каждой операции self.add_weight, как показано ниже.

self.add_weight(name='name')

Благодаря этому я мог безопасно сохранять и перезагружать обученные модели.

Если вы хотите взглянуть на другие проблемы, связанные с тензорным потоком, ознакомьтесь со следующим



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