如何让TFX的StatisticsGen叠加展示训练与验证集统计图表?
在Kubeflow的TFX流水线中叠加展示训练/验证集统计曲线
要实现和tfdv.visualize_statistics(lhs_statistics=train_stats, rhs_statistics=eval_stats, lhs_name='train', rhs_name='eval')一致的叠加对比效果,可通过以下两种方式实现:
方法1:手动加载统计文件进行可视化
StatisticsGen组件会为训练、验证数据集分别生成独立的统计数据文件,你可以直接用TFDV工具加载后对比:
- 在Kubeflow流水线UI中找到StatisticsGen的输出Artifact,下载训练集和验证集对应的
stats_tfrecord文件 - 运行以下代码生成叠加对比图表:
import tensorflow_data_validation as tfdv # 替换为实际的文件路径 train_stats = tfdv.load_statistics('/path/to/train_stats_tfrecord') eval_stats = tfdv.load_statistics('/path/to/eval_stats_tfrecord') # 生成叠加对比图 tfdv.visualize_statistics( lhs_statistics=train_stats, rhs_statistics=eval_stats, lhs_name='训练集', rhs_name='验证集' )
执行后会弹出交互式图表,直观展示两个数据集的分布差异。
方法2:在流水线中集成自动对比组件
如果希望流水线自动生成并保存对比图表,可以自定义TFX组件实现:
- 编写自定义Executor类,处理StatisticsGen的输出并生成对比HTML:
from tfx import types from tfx.components.base import base_executor from tfx.types import artifact_utils import tensorflow_data_validation as tfdv import os class StatsCompareExecutor(base_executor.BaseExecutor): def Do(self, input_dict, output_dict, exec_properties): # 获取训练、验证集统计Artifact train_stats_artifact = artifact_utils.get_single_instance(input_dict['train_stats']) eval_stats_artifact = artifact_utils.get_single_instance(input_dict['eval_stats']) # 加载统计数据 train_stats = tfdv.load_statistics(train_stats_artifact.uri) eval_stats = tfdv.load_statistics(eval_stats_artifact.uri) # 生成并保存对比HTML output_dir = output_dict['stats_compare'].uri os.makedirs(output_dir, exist_ok=True) output_path = os.path.join(output_dir, 'stats_compare.html') tfdv.visualize_statistics( lhs_statistics=train_stats, rhs_statistics=eval_stats, lhs_name='训练集', rhs_name='验证集', output_path=output_path )
- 定义组件类型并添加到TFX流水线中,配置好依赖(依赖StatisticsGen的训练、验证统计输出)
- 流水线运行后,在Kubeflow UI中查看该组件的输出Artifact,即可打开生成的对比HTML图表。
关键注意点
- 确保ExampleGen组件已正确拆分训练、验证数据集,StatisticsGen会自动为每个数据集生成统计数据
- 自定义组件需正确配置输入输出Artifact类型,避免依赖错误
内容的提问来源于stack exchange,提问作者Youcef Kacer
相关产品推荐
相关产品推荐

