问题标签 [tensorflow-transform]

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

tensorflow - 使用 Tensorflow Extended 时,如何使用本地 CSV 文件运行我的 apache 光束管道?

必须先对 csv 数据进行解码,然后才能将其传递给 TFT,而 Beams TextIO 不能独立工作,那么它是如何工作的呢?

0 投票
0 回答
106 浏览

tensorflow2.0 - 无法在转换组件 (TFX) 中使用句子嵌入

我正在使用列是数字或分类的评论数据集。最后一列是文本评论(英文句子段落),所以我使用通用句子编码器(https://tfhub.dev/google/universal-sentence-encoder/4)来获得句子嵌入。该项目的目标是为每个评论示例分配一个情感标签。对于 TF (2.0) Keras 模型,所有这些都相对简单。

但我无法弄清楚如何让它在 TFX 管道中工作。具体来说,在尝试使用预训练嵌入模型时,我无法弄清楚如何同时使用 ExampleGen 和 Transform 组件。示例 gen 组件被输入原始数据,因此 transform 组件最终会获得评论文本的稀疏张量。但这是我想使用通用句子编码器并获取句子嵌入张量的地方(编码器接受一个字符串、字符串列表或字符串渴望张量列表来生成嵌入)。评论文本是情感分类的主要部分,所以本质上,我无法进一步进行。

我可以做两件事:

  1. preprocessing_fn变换组件中,以某种方式将评论稀疏张量转换为字符串张量,然后可以将其输入通用句子编码器模型。我已经尝试过了,但遇到了急切的执行问题(“张量”对象没有属性“numpy”错误)。
  2. 丢弃 ExampleGen 组件,改用 Apache Beam + Tensorflow Transform 来获取数据,执行必要的转换,然后让 Trainer 组件从这里(我还不确定这部分)获取数据,然后是 Evaluator、Pusher 等。但这感觉需要更多的努力,我想了解在我走这条路之前是否有我遗漏的技巧。

我对 TF 比较陌生,所以对此的任何帮助将不胜感激,谢谢!

编辑:我确实发现此链接讨论了类似的内容(https://github.com/tensorflow/tfx/issues/2517),但也无法从中得出任何具体的信息。

0 投票
0 回答
33 浏览

tensorflow2.0 - 如何通过仅保存一份用户特征副本来减少 TensorFlow 服务的有效负载

我有以下模型来预测用户对项目的偏好。模型将使用 Tensorflow 服务提供服务,输入将通过 json 有效负载文件发送到模型。

对于每一次,该模型将预测一个用户对 1000 个项目的偏好。现在我必须重复功能 user_c_inputs 1000 次并将所有重复项保存在 json 文件中。

是不是可以在json文件中只保存一份user_c_inputs,让json文件更小,预测的延迟更少?

谢谢!

0 投票
0 回答
82 浏览

tfx - 如何使用 Tensorflow Transform 动态计算 tf.one_hot 中深度参数的多类分类标签数量?

我有一个多类 NLP 分类问题,我需要针对大约 1000 个类别标签训练大约 100 万个文本样本。随着未来的数据集被输入管道,这个唯一类别标签的数量将略有变化。

为此,我需要将 tf.one_hot 中的深度参数设置为该训练实例的动态确定的唯一标签的数量。

要知道唯一标签的全部数量,我知道我需要完整地遍历数据。所以,我被困的地方是如何计算这个数字。

我认为 tft.size 适合获得这个完整的通行证,但它似乎不起作用。当我硬编码 1000 时,您可以在下面看到它工作正常:

给予:

但是,如果我改为使用 tft.size 我会收到以下错误:

可以将深度硬编码到 1500 并交叉手指说标签数量永远不会超过这个值,但我不确定如果我这样做的话我是否能够和自己一起生活:(

0 投票
1 回答
83 浏览

tensorflow - TensorFlow Transform 调试和迭代开发最佳实践?

我现在已经在几个项目中使用了 TFX,并且发现调试 tf.transform 极具挑战性。我最初的几个管道是在 Airflow 中组成的,这需要我提交代码、推送到 Airflow、运行 Dag 以获取代码反馈。这非常糟糕,因为它在迭代开发循环中至少延迟了 2 分钟。在示例中提供的笔记本中使用 tfx 有很大帮助,因为它将时间缩短到大约一分钟。

如果代码有效,您可以使用这样的代码来挖掘生成的 protobuf 以获取输出

人们还有其他方法可以用来解决这种痛苦吗?我在做错事吗?我绝对看到了使用 Transform 来避免训练/服务倾斜疼痛的好处,但我觉得 Transform 的痛苦实际上可能更糟......

0 投票
1 回答
96 浏览

python - 如何通过 TensorFlow 转换管道传递 TensorFlow 数据集?

我已经为我的原始数据实现了一个自定义的 TensorFlow 数据集。tensorflow.data.Dataset我可以按如下方式下载、准备和加载数据:

我想在TensorFlow 转换管道中转换这些数据以进行模型训练。但是,我能够将数据集传递到转换管道的唯一方法是将其转换为实例字典并传入原始数据元数据。

将 TensorFlow 数据集传递到 TensorFlow 转换管道是否有更简单、内存效率更高的方法?

0 投票
0 回答
89 浏览

tensorflow2.0 - 如何使用 tfx + tf.Transform 函数并启用急切执行?(“tf.compat.v1.disable_eager_execution()”错误)

我正在尝试编写一个函数,它是tfx (Tensorflow Extended) Transform 组件的一部分。我想在里面使用一些tf.Transform 模块(注意它与 tfx Transform 组件不同)功能。这是我第一次使用 Tensoflow,所以我很想调试并查看每一行代码的结果 - 这就是我需要急切执行的原因,但保持启用它会导致类似的错误(由 引发tft.apply_and_compute_vocabulary):RuntimeError: tf.placeholder() is not compatible with eager execution. 我也不确定tfx 中允许的内容- 现在我的代码位于单独的笔记本中,以便快速调试,我担心在将其放入组件后某些将无法工作(例如非张量流操作)。

摘要 - 主要问题:

  1. 如何使tft函数与急切执行一起工作或如何在禁用急切模式时查看单行代码的结果(超过<tf.Tensor 'RaggedSegmentJoin_2/UnsortedSegmentJoin:0' shape=(7,) dtype=string>
  2. 是否有单独工作/在急切模式下工作但不能在tfx转换组件内工作/在图形模式下工作的功能?

这对我来说有很多东西,即使在阅读了文档后我也很困惑,所以对于我什至不知道我应该问的问题的任何建议或答案将不胜感激。

0 投票
0 回答
51 浏览

tensorflow - Tensorflow Extended (TFX):有没有一种简单的方法可以从 Transorm 组件中调试函数?

我应该修改一个作为Transorm 组件一部分的函数。这是一长串张量流操作,我不确定。特定步骤如何影响已处理的变量 b. 我的输入是什么样的。我不能只在急切模式下运行它们,因为它们中的大多数都是仅图形模式。有谁知道查看特定线条效果的简单方法?

0 投票
0 回答
27 浏览

tensorflow - 如何在独立的张量流转换 (TFT) 管道中使用 BigQuery?

我对 tft.AnalyzeAndTransformDataSet 的 preprocessing_fn 的交互式开发很感兴趣。通过交互式开发,我的意思是在 Jupyter Notebook 中运行独立的光束管道,然后使用 tf.data.Dataset 连接到生成的转换数据,以便我可以检查结果。

换句话说,在交互式开发过程中,我不想运行带有 Transform 组件的 TFX 管道。我想逐步建立我的 preprocessing_fn 并在迭代时在笔记本中检查结果。

为此,我在“使用 TensorFlow 变换预处理数据”高级教程中修改了 Beam 管道:

该教程使用 CSV 作为输入数据。我正在尝试重构它以使用 BigQuery,但我被卡住了。

在本教程中,transform_data 函数首先通过实例化一个 tfxio.BeamRecordCsvIO 类开始处理输入数据:

然后管道开始创建一个带有两个标准梁 PTransform 的 raw_data PCollection 来读取和清理文本数据:

然后 csv_tfxio.BeamSource 用于解码训练数据:

并且通过将 raw_data PCollection 与从 csv_tfxio BeamRecordCsvTFXIO 创建的 TensorAdapterConfig 组合来创建 raw_dataset 元组:

raw_dataset = (raw_data, csv_tfxio.TensorAdapterConfig())

最后,将 raw_dataset 元组和 preprocessing_fn 传递给 tft_beam.AnalyzeAndTransformDataset,如下所示:

我想在不将数据导出到 csv 的情况下从 BigQuery 读取数据,并将此步骤替换为上面显示的 ReadFromText:

...但我不知道如何创建 AnalyzeAndTransformDataset 所需的 TensorAdapterConfig。

除了 TFX 源代码中的注释之外,几乎没有这些类的任何文档。特别是,我在 tfx_bsl 中没有看到任何 BigQuery 特定的 TFXIO 子类,因此我尝试使用现有的 csv 处理函数来破解某些东西,但它没有用。

具体来说,我首先SCHEMA使用 tft.tf_metadata.schema_utils.schema_from_feature_spec 以与教程类似的方式从原始特征规范创建了一个。

因为张量表示是 TensorAdapterConfig 的一部分,所以我尝试了:

但是 GetTensorRepresentationsFromSchema 返回 None,大概是因为它期望的 Schema 格式与 schema_from_feature_spec 提供的格式不同。

TensorAdapterConfig 还需要一个 pyarrow Schema 而不是 schema_pb2.Schema,所以我尝试使用 tfx_bsl.coders.csv_decoder 中的 GetArrowSchema 类创建一个,但我不知道它是否会起作用,因为我无法创建张量表示.

教程在独立的 TFT 管道中成功使用了 BigQuery,但它使用了我怀疑在实施 TFXIO rfc 之前存在的旧方法:

在使用最新版本的 TFX 和 TFT 的独立 Beam 管道中使用 BigQuery 的最佳方式是什么?

0 投票
1 回答
38 浏览

tensorflow - 如何在 apply_vocabulary 之前获取 tensorflow_transform 中的词汇量?

还在https://github.com/tensorflow/transform/issues/261上发布了问题

我在 TFX 中使用 tft,需要将字符串列表类标签转换为内部的多热指标preprocesing_fn。本质上:

我试图从 vocab 的结果中获取 VOCAB_SIZE,但找不到满足延迟执行和已知形状的方法。我在下面得到的最接近的不会通过保存的模型导出,因为标签的形状是未知的。

得到

知道如何实现这一目标吗?