Я могу запустить CsvExampleGen без сообщения об ошибке, но выходы (и входы) результирующих примеров всегда пусты.
Я использую tfx == 0.24.0.
Чтобы использовать CsvExampleGen для чтения файлов CSV, согласно документации и руководствам (включая https://www.tensorflow.org/tfx/guide/examplegen) + примечания к выпуску tfx 0.23.0 / 0.24.0 (https://github.com/tensorflow/tfx/releases), следующих строк кода должно хватить для чтения файла CVS:
from tfx.components import CsvExampleGen
example_gen = CsvExampleGen(input_base=data_path)
где data_path определяет каталог с файлами CVS. (Обратите внимание, что код отличается от официального документа тем, что не использует external_input; вместо этого он следует новому интерфейсу, описанному в примечаниях к выпуску для 0.23.0.)
Из руководств я понял, что для тестирования должно хватить одного простого файла CVS (хотя я пробовал использовать до 7 файлов).
Я не получаю никаких сообщений об ошибках (кроме одного, которое я должен игнорировать, если у меня нет доступного графического процессора); однако выходы (и входы) результирующей структуры пусты (пустой список и пустой set / dict соответственно). Однако я считаю, что они не должны быть пустыми.
Рассматриваемые файлы CSV ОБЯЗАТЕЛЬНЫ и затронуты, потому что, если я введу там ошибку (например, дополнительный столбец в одной строке), я получу сообщение об ошибке.
Я пробовал это как с автономной функцией, так и внутри конвейера (для простоты запустите с BeamDagRunner). Конвейер действительно создает файл metadata.db, но я не могу найти там никаких следов данных CSV (например, имен столбцов). Добавление StatisticsGen в конвейер больше не помогло.
Я пробовал это с набором данных iris, с заголовками столбцов и без них. Я также пробовал использовать до 7 небольших искусственных файлов CVS в data_path, альтернативно с чисто числовыми и смешанными числовыми / категориальными данными или с запятыми и точками с запятой в качестве разделителей. Результат всегда один и тот же.
Есть ли у меня проблемы с кодом или, может быть, с какой-то конфигурацией или библиотеками?
Вот полный код (насколько это возможно):
PIPELINE_NAME = "X-pipeline-iris2"
BASE_PATH = r"C:\***\FX_Experiments"
BASE_PATH_PIPELINE = os.path.join(BASE_PATH, "pipeline")
BASE_PATH_TESTS = os.path.join(BASE_PATH, "tests")
PIPELINE_ROOT = os.path.join(BASE_PATH_PIPELINE, "output")
METADATA_PATH = os.path.join(BASE_PATH_PIPELINE, "tfx_metadata", PIPELINE_NAME, "metadata.db")
DATA_PATH = os.path.join(BASE_PATH_TESTS, "iris2")
ENABLE_CACHE = True
def create_pipeline(
pipeline_name: Text, pipeline_root: Text, data_path: Text,
enable_cache: bool,
metadata_connection_config: Optional[metadata_store_pb2.ConnectionConfig] = None,
beam_pipeline_args: Optional[List[Text]] = None
):
components = []
example_gen = CsvExampleGen(input_base=data_path)
components.append(example_gen)
stat_gen = StatisticsGen(examples=example_gen.outputs['examples'])
components.append(stat_gen)
return pipeline.Pipeline(
pipeline_name = pipeline_name,
pipeline_root = pipeline_root,
components = components,
enable_cache = enable_cache,
metadata_connection_config = metadata_connection_config,
beam_pipeline_args = beam_pipeline_args
)
def run_pipeline():
this_pipeline = create_pipeline(
pipeline_name=PIPELINE_NAME,
pipeline_root=PIPELINE_ROOT,
data_path=DATA_PATH,
enable_cache=ENABLE_CACHE,
metadata_connection_config=metadata.sqlite_metadata_connection_config(METADATA_PATH)
)
BeamDagRunner().run(this_pipeline)
Также потенциально полезно: информация регистратора:
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Component CsvExampleGen depends on [].
INFO:absl:Component CsvExampleGen is scheduled.
INFO:absl:Component StatisticsGen depends on ['Run[CsvExampleGen]'].
INFO:absl:Component StatisticsGen is scheduled.
INFO:absl:Component CsvExampleGen is running.
INFO:absl:Running driver for CsvExampleGen
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:select span and version = (0, None)
INFO:absl:latest span and version = (0, None)
INFO:absl:Running publisher for CsvExampleGen
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component CsvExampleGen is finished.
INFO:absl:Component StatisticsGen is running.
...