问题标签 [tfx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 如何从 TFX BulkInferrer 获取数据帧或数据库写入?
我对 TFX 很陌生,但有一个显然可以通过BulkInferrer使用的 ML 管道。这似乎只以 Protobuf 格式产生输出,但由于我正在运行批量推理,我想将结果通过管道传输到数据库。(DB 输出似乎应该是批量推理的默认值,因为批量推理和 DB 访问都利用了并行化......但 Protobuf 是每记录的序列化格式。)
我假设我可以使用Parquet-Avro-Protobuf之类的东西来进行转换(尽管这是在 Java 中,而管道的其余部分在 Python 中),或者我可以自己编写一些东西来一个接一个地使用所有 protobuf 消息,转换将它们转换为 JSON,将 JSON 反序列化为字典列表,然后将字典加载到 Pandas DataFrame 中,或者将其存储为一堆键值对,我将其视为一次性数据库......但这听起来像对于一个非常常见的用例,涉及并行化和优化的大量工作和痛苦。顶级 Protobuf 消息定义是 Tensorflow 的PredictionLog。
这一定是一个常见的用例,因为像这样的 TensorFlowModelAnalytics 函数使用 Pandas DataFrames。我宁愿能够直接写入数据库(最好是 Google BigQuery)或 Parquet 文件(因为 Parquet / Spark 似乎比 Pandas 并行化更好),而且这些似乎应该是常见的用例,但我没有找到任何例子。也许我使用了错误的搜索词?
我还查看了PredictExtractor,因为“提取预测”听起来很接近我想要的......但官方文档似乎没有说明应该如何使用该类。我认为TFTransformOutput听起来像是一个很有前途的动词,但实际上它是一个名词。
我显然在这里遗漏了一些基本的东西。没有人愿意将 BulkInferrer 结果存储在数据库中吗?是否有允许我将结果写入数据库的配置选项?也许我想将ParquetIO或BigQueryIO实例添加到 TFX 管道?(TFX 文档说它在“幕后”使用 Beam,但这并没有说明我应该如何一起使用它们。)但是这些文档中的语法看起来与我的 TFX 代码完全不同,我不确定它们是否'重新兼容?
帮助?
tensorflow - TensorFlow 扩展 Kubeflow 多个 Worker
我在 Kubeflow DAG Runner 上遇到了 TFX 问题。问题是我每次运行只能启动一个 pod。除了 Apache Beam 参数之外,我没有看到任何“workers”配置,这无济于事。
在一个 pod 上运行 CSV 加载会导致 OOMKilled 错误,因为文件超过 5GB。我尝试将文件拆分为 100MB 的部分,但这也无济于事。
所以我的问题是:如何在 Kubeflow 上的多个“worker”pod 上运行 TFX 作业/阶段,或者这是否可能?
这是我一直在使用的代码:
环境:
- Docker 映像:安装了 boto3 的 tensorflow/tfx:0.26.0(aws 相关问题)
- Kubernetes:AWS EKS 最新
- 库比流:1.0.4
tfx - 将旧版 ML 管道迁移到 TFX
我们正在研究将我们的 ML 管道从一组手动步骤转换为 TFX 管道。然而,我确实有一些问题,我想对此有一些额外的见解。
我们通常执行以下步骤(对于图像分类任务):
- 加载图像数据和元数据
- 根据元数据过滤掉“坏”数据
- 确定基于图像的统计信息(Python 中的经典图像处理):
- 图像级特征
- 图像区域特征(区域基于微调的 EfficientDet 模型确定)
- 根据图像统计过滤掉“坏”数据
- 从此图像和元数据生成 TFRecords
- 对某些 TFRecord 进行过采样以进行类平衡(使用 tf.data)
- 训练图像分类器
- …</li>
现在,我正在尝试将其映射到典型的示例 TFX 管道上。
然而,这提出了一些问题:
我看到两个选项:
ExampleGen 使用一个 CSV 文件,其中包含指向要加载的图像和要加载的元数据的指针(在步骤“1”之上)。然而:
- 如果此 CSV 文件包含图像文件的路径,ExampleGen 是否可以加载图像数据并将其添加到其输出中?
- ExampleGen 的输出是流输出,还是所有示例数据的转储?
ExampleGen 将 TFRecords 作为输入(上述步骤“5”的输出)
-> 这意味着我们仍然需要在 TFX 之外实施步骤 1-5……这会降低我们对 TFX 的价值……</p>
你能建议什么是最好的前进方式吗?
StatisticsGen 是否还可以生成基于每个示例的统计信息(例如基于经典图像处理的某些图像(区域)特征)?还是应该在 ExampleGen 中实现?或者…?
可以使用元数据存储缓存计算的统计信息吗?如果是,是否有可用的示例?
使用经典图像处理计算基于图像的特征很慢。如果新数据可用,触发要执行的 TFX 输入组件,理想情况下应该从缓存中加载已经计算的统计信息。
ExampleValidator 可能会拒绝某些示例(例如缺失数据、异常值……)是否正确?
如何在此设置中实现网络输入端的类平衡(不是通过损失函数)(通常我们通过使用 tf.data 对我们的 TFRecord 进行过采样来做到这一点)?如果这是在 ExampleGen 级别完成的,那么 ExampleValidator 可能仍会拒绝一些可能再次不平衡数据的示例。对于大数据 ML 任务,这似乎不是一个大问题,但对于小数据 ML 任务(通常在医疗保健环境中就是这种情况)而言,它变得至关重要。所以我希望在 Transform 组件之前有一个 TFX 组件,但是这个块应该可以访问所有数据,而不是以流的方式(参见我之前关于 ExampleGen 输出的问题)......</p>
感谢您的见解。
tensorflow - 在 TFX 中,是否可以用日期推断 Schema?
我正在使用 TFX(更准确地说是 TensorFlow 数据验证)和那里记录的 infer_schema 方法https://www.tensorflow.org/tfx/data_validation/api_docs/python/tfdv/infer_schema。它从描述列类型的 csv 文件生成模式。
它适用于浮点数、字节数、类别......但我也想检测日期。我没有在教程或指南中找到它。生成的原始消息支持日期,因此这不是问题(请参阅 TimeDomain)。https://github.com/tensorflow/metadata/blob/master/tensorflow_metadata/proto/v0/schema.proto
我尝试使用具有该格式(非美国日期格式)的 CSV 文件,它被识别为字节 :(
代码与教程中的代码相同,因此或多或少:
显示:
我可以让它工作吗?如何?
谢谢!
python-3.x - 使用 TensorFlow Extended (TFX) 进行多输出分类
我对 TFX(TensorFlow Extended)很陌生,并且一直在阅读 TensorFlow 门户上的示例教程,以了解更多信息,以便将其应用于我的数据集。
在我的场景中,手头的问题不是预测单个标签,而是需要我预测 2 个输出(类别 1,类别 2)。
我已经使用纯 TensorFlow Keras 功能 API 完成了这项工作,并且效果很好,但现在我正在寻找是否可以将其安装到 TFX 管道中。
我得到错误的地方是管道的Trainer阶段,它引发错误的地方是_input_fn,我怀疑这是因为我没有正确地将给定数据拆分为(特征、标签)张量对管道。
设想:
每行输入数据的形式为 [Col1, Col2, Col3, ClassificationA, ClassificationB]
ClassificationA 和 ClassificationB 是我尝试使用 Keras 功能模型预测的分类标签
keras 功能模型的输出层如下所示,其中有 2 个输出连接到单个密集层(注意:附加到末尾的 _xf 只是为了说明我已将类编码为 int 表示)
output_1 = tf.keras.layers.Dense(TargetA_Class, activation='sigmoid', name = 'ClassificationA_xf')(dense)
output_2 = tf.keras.layers.Dense(TargetB_Class, activation='sigmoid', name = 'ClassificationB_xf')(dense)
模型 = tf.keras.Model(输入 = 输入,输出 = [输出_1,输出_2])
在培训模块文件中,我在模块文件的开头导入了所需的包>
培训模块文件中的当前input_fn如下所示(按照教程进行操作)
当我运行培训师组件时,出现的错误是:
label_key=_transformed_name(_CATEGORICAL_LABEL_KEYS[0]),transformed_name(_CATEGORICAL_LABEL_KEYS 1 )),
^ SyntaxError: 位置参数跟随关键字参数
我也试过label_key=[_transformed_name(x) for x in _CATEGORICAL_LABEL_KEYS])也给出了错误。
但是,如果我只传入一个标签键label_key=transformed_name(_CATEGORICAL_LABEL_KEYS[0])那么它工作正常。
仅供参考 - _CATEGORICAL_LABEL_KEYS 只不过是一个列表,其中包含我试图预测的 2 个输出的名称(ClassificationA,ClassificationB)。
transform_name 只不过是一个为转换后的数据返回更新的名称/键的函数:
问题:
据我所知,dataset_options.TensorFlowDatasetOptions 的 label_key 参数 只能接受标签的单个字符串/名称,这意味着它可能无法输出具有多个标签的数据集。
有没有一种方法可以修改_input_fn以便我可以获取_input_fn返回的数据集以返回 2 个输出标签?所以返回的张量看起来像:
Feature_Tensor: {Col1_xf: Col1_transformedfeature_values, Col2_xf: Col2_transformedfeature_values, Col3_xf: Col3_transformedfeature_values}
Label_Tensor:{ClassificationA_xf:ClassA_encodedlabels,ClassificationB_xf:ClassB_encodedlabels}
希望得到更广泛的 tfx 社区的建议!
python - 按照 TFX 教程获取 pip 依赖错误
我正在尝试遵循官方网站上的 Tensorflow 扩展教程: https ://www.tensorflow.org/tfx/tutorials/tfx/components_keras
当我尝试执行该行时
我收到以下错误:
我无法在网上找到任何东西 - 任何帮助表示赞赏:)
python - 如何创建自定义 TFX 组件来执行特征工程/构建
TFX 变换组件使用无法在其preprocessing_fn内急切执行的张量进行操作。因此,每个特征的值不能传递给基于这些值生成新特征的 python 函数。
我尝试创建自定义组件,但未能修改输入数据,因为tf.Example对象无法修改。
从管道中构建复杂/自定义功能的推荐方法是什么?
python - 如何从自定义 Python 函数 TFX 组件传播 mlpipeline-metrics?
注意:这是我报告的 GitHub 问题的副本。
重新发布它希望得到更多关注,我将更新任何一个站点上的任何解决方案。
问题
我想mlpipeline-metrics
从我的自定义 Python 函数 TFX 组件中导出,以便它显示在 KubeFlow UI中。
这是我正在尝试做的一个最小示例:
在 KubeFlow UI 中,“运行输出”选项卡显示“未找到此运行的指标”。但是,输出伪影显示在 ML 元数据中(见屏幕截图)。任何有关如何实现这一点的帮助将不胜感激。谢谢!
tensorflow - 删除 TensorFlow 扩展中的停用词
我必须预处理 NLP 数据,所以我必须从 Tensorflow 数据集中删除停用词(来自 nltk 库)。我尝试了很多这样的事情:
或这个:
但它没有用。第一个代码显示如下错误:RaggedTensor is unhashable.
tensorflow - “使用模板创建 TFX 管道”给出错误“构建失败。没有对指定图像存储库的推送访问权限。”
我和我的团队正在 GCP 中建立管道,我们正在尝试通过运行笔记本教程https://www.tensorflow.org/tfx/tutorials/tfx/cloud-ai-platform-pipelines来学习。但是,当我们进入创建管道的步骤时,会出现此错误。请帮忙!
我们跑:
我们得到了:
- - - - 更新 - - - - -
如果这有帮助,我会在我的日志中找到: