问题标签 [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.

0 投票
3 回答
490 浏览

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 结果存储在数据库中吗?是否有允许我将结果写入数据库的配置选项?也许我想将ParquetIOBigQueryIO实例添加到 TFX 管道?(TFX 文档说它“幕后”使用 Beam,但这并没有说明我应该如何一起使用它们。)但是这些文档中的语法看起来与我的 TFX 代码完全不同,我不确定它们是否'重新兼容?

帮助?

0 投票
1 回答
72 浏览

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
0 投票
1 回答
103 浏览

tfx - 将旧版 ML 管道迁移到 TFX

我们正在研究将我们的 ML 管道从一组手动步骤转换为 TFX 管道。然而,我确实有一些问题,我想对此有一些额外的见解。

我们通常执行以下步骤(对于图像分类任务):

  1. 加载图像数据和元数据
  2. 根据元数据过滤掉“坏”数据
  3. 确定基于图像的统计信息(Python 中的经典图像处理):
    1. 图像级特征
    2. 图像区域特征(区域基于微调的 EfficientDet 模型确定)
  4. 根据图像统计过滤掉“坏”数据
  5. 从此图像和元数据生成 TFRecords
  6. 对某些 TFRecord 进行过采样以进行类平衡(使用 tf.data)
  7. 训练图像分类器
  8. …</li>

现在,我正在尝试将其映射到典型的示例 TFX 管道上。

然而,这提出了一些问题:

  1. 我看到两个选项:

    • ExampleGen 使用一个 CSV 文件,其中包含指向要加载的图像和要加载的元数据的指针(在步骤“1”之上)。然而:

      • 如果此 CSV 文件包含图像文件的路径,ExampleGen 是否可以加载图像数据并将其添加到其输出中?
      • ExampleGen 的输出是流输出,还是所有示例数据的转储?
    • ExampleGen 将 TFRecords 作为输入(上述步骤“5”的输出)

      -> 这意味着我们仍然需要在 TFX 之外实施步骤 1-5……这会降低我们对 TFX 的价值……</p>

    你能建议什么是最好的前进方式吗?

  2. StatisticsGen 是否还可以生成基于每个示例的统计信息(例如基于经典图像处理的某些图像(区域)特征)?还是应该在 ExampleGen 中实现?或者…?

  3. 可以使用元数据存储缓存计算的统计信息吗?如果是,是否有可用的示例?

    使用经典图像处理计算基于图像的特征很慢。如果新数据可用,触发要执行的 TFX 输入组件,理想情况下应该从缓存中加载已经计算的统计信息。

  4. ExampleValidator 可能会拒绝某些示例(例如缺失数据、异常值……)是否正确?

  5. 如何在此设置中实现网络输入端的类平衡(不是通过损失函数)(通常我们通过使用 tf.data 对我们的 TFRecord 进行过采样来做到这一点)?如果这是在 ExampleGen 级别完成的,那么 ExampleValidator 可能仍会拒绝一些可能再次不平衡数据的示例。对于大数据 M​​L 任务,这似乎不是一个大问题,但对于小数据 ML 任务(通常在医疗保健环境中就是这种情况)而言,它变得至关重要。所以我希望在 Transform 组件之前有一个 TFX 组件,但是这个块应该可以访问所有数据,而不是以流的方式(参见我之前关于 ExampleGen 输出的问题)......</p>

感谢您的见解。

0 投票
1 回答
165 浏览

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 文件,它被识别为字节 :(

代码与教程中的代码相同,因此或多或少:

显示:

我可以让它工作吗?如何?

谢谢!

0 投票
1 回答
165 浏览

python-3.x - 使用 TensorFlow Extended (TFX) 进行多输出分类

我对 TFX(TensorFlow Extended)很陌生,并且一直在阅读 TensorFlow 门户上的示例教程,以了解更多信息,以便将其应用于我的数据集。

在我的场景中,手头的问题不是预测单个标签,而是需要我预测 2 个输出(类别 1,类别 2)。

我已经使用纯 TensorFlow Keras 功能 API 完成了这项工作,并且效果很好,但现在我正在寻找是否可以将其安装到 TFX 管道中。

我得到错误的地方是管道的Trainer阶段,它引发错误的地方是_input_fn,我怀疑这是因为我没有正确地将给定数据拆分为(特征、标签)张量对管道。

设想:

  1. 每行输入数据的形式为 [Col1, Col2, Col3, ClassificationA, ClassificationB]

  2. 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 社区的建议!

0 投票
3 回答
297 浏览

python - 按照 TFX 教程获取 pip 依赖错误

我正在尝试遵循官方网站上的 Tensorflow 扩展教程: https ://www.tensorflow.org/tfx/tutorials/tfx/components_keras

当我尝试执行该行时

我收到以下错误:

在此处输入图像描述

我无法在网上找到任何东西 - 任何帮助表示赞赏:)

0 投票
0 回答
72 浏览

python - 如何创建自定义 TFX 组件来执行特征工程/构建

TFX 变换组件使用无法在其preprocessing_fn内急切执行的张量进行操作。因此,每个特征的值不能传递给基于这些值生成新特征的 python 函数。

我尝试创建自定义组件,但未能修改输入数据,因为tf.Example对象无法修改。

从管道中构建复杂/自定义功能的推荐方法是什么?

0 投票
0 回答
105 浏览

python - 如何从自定义 Python 函数 TFX 组件传播 mlpipeline-metrics?

注意:这是我报告的 GitHub 问题的副本。

重新发布它希望得到更多关注,我将更新任何一个站点上的任何解决方案。

问题

我想mlpipeline-metrics从我的自定义 Python 函数 TFX 组件中导出,以便它显示在 KubeFlow UI中。

这是我正在尝试做的一个最小示例:

在 KubeFlow UI 中,“运行输出”选项卡显示“未找到此运行的指标”。但是,输出伪影显示在 ML 元数据中(见屏幕截图)。任何有关如何实现这一点的帮助将不胜感激。谢谢!

KubeFlow 用户界面截图

0 投票
2 回答
1195 浏览

tensorflow - 删除 TensorFlow 扩展中的停用词

我必须预处理 NLP 数据,所以我必须从 Tensorflow 数据集中删除停用词(来自 nltk 库)。我尝试了很多这样的事情:

或这个:

但它没有用。第一个代码显示如下错误:RaggedTensor is unhashable.

0 投票
0 回答
261 浏览

tensorflow - “使用模板创建 TFX 管道”给出错误“构建失败。没有对指定图像存储库的推送访问权限。”

我和我的团队正在 GCP 中建立管道,我们正在尝试通过运行笔记本教程https://www.tensorflow.org/tfx/tutorials/tfx/cloud-ai-platform-pipelines来学习。但是,当我们进入创建管道的步骤时,会出现此错误。请帮忙!

我们跑:

我们得到了:

- - - - 更新 - - - - -

如果这有帮助,我会在我的日志中找到:

在此处输入图像描述