С git ответ на вопрос Спасибо Эван Розен
Привет, Фолкс,
Отображаемые предупреждения указывают на то, что StatisticsGen пытается относитесь к своим необработанным изображениям как к категориальным строковым элементам. Байты изображения декодируются очень хорошо. Проблема заключается в том, что при написании статистики (включая лучшие K примеров) выходной протокол ожидает допустимую строку UTF-8, но вместо этого получает необработанные байты изображения. Нет ничего плохого в ваших настройках из того, что я могу сказать, но это просто непреднамеренный побочный эффект предупреждения о благих намерениях, если у вас есть категорическая строковая функция, которую нельзя сериализовать. Мы попытаемся найти лучший вариант по умолчанию, который обрабатывает данные изображения более элегантно.
Тем временем, чтобы сообщить StatisticsGen, что эта функция действительно является непрозрачным BLOB-объектом, вы можете передать измененную пользователем схему, как описано в StatsGen документы. Чтобы сгенерировать эту схему, вы можете запустить StatisticsGen и SchemaGen один раз (для образца данных), а затем изменить предполагаемую схему, чтобы аннотировать эти функции изображения. Вот модифицированная версия colab из @ tall-jo sh:
Open In Colab
Дополнительные шаги немного многословны, но имеют куратор Схема часто является хорошей практикой по другим причинам. Вот ячейка, которую я добавил в блокнот:
from google.protobuf import text_format
from tensorflow.python.lib.io import file_io
from tensorflow_metadata.proto.v0 import schema_pb2
# Load autogenerated schema (using stats from small batch)
schema = tfx.utils.io_utils.SchemaReader().read(
tfx.utils.io_utils.get_only_uri_in_dir(
tfx.types.artifact_utils.get_single_uri(schema_gen.outputs['schema'].get())))
# Modify schema to indicate which string features are images.
# Ideally you would persist a golden version of this schema somewhere rather
# than regenerating it on every run.
for feature in schema.feature:
if feature.name == 'image/raw':
feature.image_domain.SetInParent()
# Write modified schema to local file
user_schema_dir ='/tmp/user-schema/'
tfx.utils.io_utils.write_pbtxt_file(
os.path.join(user_schema_dir, 'schema.pbtxt'), schema)
# Create ImportNode to make modified schema available to other components
user_schema_importer = tfx.components.ImporterNode(
instance_name='import_user_schema',
source_uri=user_schema_dir,
artifact_type=tfx.types.standard_artifacts.Schema)
# Run the user schema ImportNode
context.run(user_schema_importer)
Надеюсь, вы найдете этот обходной путь полезным. А пока мы рассмотрим лучший опыт по умолчанию для функций с изображениями.