标签: tensorflow-transform

使用TensorFlow变换有效地将标记转换为单词向量

我想在训练,验证和推理阶段使用TensorFlow Transform将标记转换为单词向量.

我按照这个StackOverflow帖子实现了从标记到向量的初始转换.转换按预期工作,我获取EMB_DIM每个令牌的向量.

import numpy as np
import tensorflow as tf

tf.reset_default_graph()
EMB_DIM = 10

def load_pretrained_glove():
    tokens = ["a", "cat", "plays", "piano"]
    return tokens, np.random.rand(len(tokens), EMB_DIM)

# sample string 
string_tensor = tf.constant(["plays", "piano", "unknown_token", "another_unknown_token"])


pretrained_vocab, pretrained_embs = load_pretrained_glove()

vocab_lookup = tf.contrib.lookup.index_table_from_tensor(
    mapping = tf.constant(pretrained_vocab),
    default_value = len(pretrained_vocab))
string_tensor = vocab_lookup.lookup(string_tensor)

# define the word embedding
pretrained_embs = tf.get_variable(
    name="embs_pretrained",
    initializer=tf.constant_initializer(np.asarray(pretrained_embs), dtype=tf.float32),
    shape=pretrained_embs.shape,
    trainable=False)

unk_embedding = tf.get_variable(
    name="unk_embedding",
    shape=[1, EMB_DIM],
    initializer=tf.random_uniform_initializer(-0.04, 0.04),
    trainable=False)

embeddings = …
Run Code Online (Sandbox Code Playgroud)

word2vec tensorflow apache-beam tensorflow-transform glove

13
推荐指数
1
解决办法
569
查看次数

应用TensorFlow Transform来转换/缩放生产中的要素

概观

我按照以下指南编写了TF Records,我曾经在那里tf.Transform预处理我的功能.现在,我想部署我的模型,我需要在真实的实时数据上应用这个预处理功能.

我的方法

首先,假设我有2个功能:

features = ['amount', 'age']
Run Code Online (Sandbox Code Playgroud)

我有transform_fn来自Apache Beam,来自working_dir=gs://path-to-transform-fn/

然后我使用以下方法加载转换函数:

tf_transform_output = tft.TFTransformOutput(working_dir)

我认为在生产中服务的最简单方法是获取一系列处理过的数据,然后调用model.predict()(我使用的是Keras模型).

要做到这一点,我认为transform_raw_features()方法正是我所需要的.

但是,似乎在构建架构之后:

raw_features = {}
for k in features:
    raw_features.update({k: tf.constant(1)})

print(tf_transform_output.transform_raw_features(raw_features))
Run Code Online (Sandbox Code Playgroud)

我明白了:

AttributeError: 'Tensor' object has no attribute 'indices'
Run Code Online (Sandbox Code Playgroud)

现在,我假设发生了这种情况,因为我tf.VarLenFeature()在我定义架构时使用了preprocessing_fn.

def preprocessing_fn(inputs):
    outputs = inputs.copy()

    for _ in features:
        outputs[_] = tft.scale_to_z_score(outputs[_])
Run Code Online (Sandbox Code Playgroud)

我使用以下方法构建元数据:

RAW_DATA_FEATURE_SPEC = {}
for _ in features:
    RAW_DATA_FEATURE_SPEC[_] = tf.VarLenFeature(dtype=tf.float32)
    RAW_DATA_METADATA = dataset_metadata.DatasetMetadata(
    dataset_schema.from_feature_spec(RAW_DATA_FEATURE_SPEC))
Run Code Online (Sandbox Code Playgroud)

所以简而言之,给一本字典:

d = …

python tensorflow tensorflow-serving apache-beam tensorflow-transform

9
推荐指数
1
解决办法
568
查看次数

使用张量流tf变换的数据标准化

我正在使用Tensorflow使用我自己的数据集进行神经网络预测.我做的第一个是与我的计算机中的小数据集一起使用的模型.在此之后,我更改了代码,以便使用具有更大数据集的Google Cloud ML-Engine在ML-Engine中实现列车和预测.

我正在规范熊猫数据框中的功能,但这引入了偏差,我的预测结果很差.

我真正想要的是使用库tf-transform来规范化图中的数据.为此,我想创建一个函数preprocessing_fn 并使用' tft.scale_to_0_1'.https://github.com/tensorflow/transform/blob/master/getting_started.md

我发现的主要问题是当我试图做预测时.我正在寻找互联网,但我没有找到任何导出模型的例子,其中数据在训练中被标准化.在我发现的所有示例中,数据未在任何地方进行标准化.

我想知道的是,如果我对训练中的数据进行规范化,并发送一个带有新数据的新实例来进行预测,那么如何对这些数据进行归一化?

¿可能在Tensorflow数据管道中?进行规范化的变量是否保存在某个地方?

总结:我正在寻找一种方法来规范化我的模型的输入,然后新实例也变得标准化.

python google-cloud-platform tensorflow google-cloud-ml tensorflow-transform

6
推荐指数
1
解决办法
7508
查看次数

将 BigQuery 中的可为空数据输入 Tensorflow Transform

我们正在尝试构建一个管道,在 TensorFlow 中进行训练之前,从 BigQuery 获取数据,通过 TensorFlow Transform 运行。

管道已启动并正在运行,但我们在 BigQuery 中处理空值时遇到困难。

我们使用 Beam 从 BigQuery 加载:

    raw_data = (pipeline
                | '{}_read_from_bq'.format(step) >> beam.io.Read(
                    beam.io.BigQuerySource(query=source_query,
                                           use_standard_sql=True,
                                           )))
Run Code Online (Sandbox Code Playgroud)

我正在使用数据集元数据,尝试FixedLenFeature各种VarLenFeature列:

    # Categorical feature schema
    categorical_features = {
        column_name: tf.io.FixedLenFeature([], tf.string) for column_name in categorical_columns
    }
    raw_data_schema.update(categorical_features)

    # Numerical feature schema
    numerical_features = {
        column_name: tf.io.VarLenFeature(tf.float32) for column_name in numerical_columns
    }
    raw_data_schema.update(numerical_features)

    # Create dataset_metadata given raw_data_schema
    raw_metadata = dataset_metadata.DatasetMetadata(
        schema_utils.schema_from_feature_spec(raw_data_schema))
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,如果您尝试将 BigQuery NULL 输入到 a 中FixedLenFeature,它就会中断。

但是,当我尝试输入字符串或整数 …

python google-bigquery tensorflow apache-beam tensorflow-transform

6
推荐指数
1
解决办法
673
查看次数

将大量数据集转换为tf.data.Dataset的最佳数据流和处理解决方案

内容:

我的文本输入管道当前包括两个主要部分:

。复杂的文本预处理并导出tf.SequenceExamples到tfrecord(自定义标记化,词汇创建,统计信息计算,规范化以及整个数据集以及每个单独示例中的更多操作)。对于每个数据配置,只需完成一次。

。一个tf.Dataset(TFRecords)管道在训练期间也进行了大量处理(string_split转换为字符,表查找,存储区,条件过滤等)。

原始数据集存在于多个位置(BigQuery,GCS,RDS等)。

问题:

问题在于,随着生产数据集快速增长(几个TB),为每种可能的数据配置(第1部分具有很多超参数)重新创建tfrecords文件是不可行的,因为每个文件都将具有数百TB的巨大容量。更不用说,tf.Datasettf.SequenceExamples或tfrecords变大时,读取速度会意外降低。

有很多可能的解决方案:

  • Apache Beam +云数据流+ feed_dict;
  • tf.Transform;
  • Apache Beam + Cloud DataFlow + tf.Dataset.from_generator;
  • tensorflow /生态系统+ Hadoop或Spark
  • tf.contrib.cloud.BigQueryReader

,但以下任何一项似乎都无法完全满足我的要求:

  1. 如第一部分所述,实时传输和处理来自BigQuery,GCS,RDS等的数据。
  2. 直接以tf.Dataset一种或另一种方式直接发送数据(protos?)以用于第二部分。
  3. 快速可靠地进行训练和推理。
  4. (可选)能够针对数据的所选部分预先计算一些全程统计信息。

  5. 编辑: Python 3支持会很棒。

tf.data.Dataset管道最合适的选择是什么?在这种情况下,最佳做法是什么?

提前致谢!

google-bigquery google-cloud-dataflow tensorflow tensorflow-datasets tensorflow-transform

5
推荐指数
1
解决办法
505
查看次数

Tensorflow - 将时间戳转换为星期几

我有一个对特征进行操作的模型,其中之一是先前事件的时间戳数组。

我想计算这个数组的每个元素,每个时间戳的星期几(“星期一”到“星期日”或 [0, 7) 中的整数)

我想在图表中执行此操作,因为我希望我的模型能够在设备上进行预测时复制此转换。

星期几只是我想从时间戳中提取的信息之一,理想情况下我还可以获得年、月等...到目前为止我发现的最接近的是 tfa.parse_time ,它作用几乎与我想要实现什么。

是否有这样的运算符的现有实现?如果没有,我该如何考虑闰年、时区、夏令时等来实现这一点......?

tensorflow tensorflow-transform

5
推荐指数
0
解决办法
395
查看次数

TensorFlow:TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“NoneType”

假设我将此数据框保存为镶木地板格式

import numpy as np
import pandas as pd

data = pd.DataFrame(dict(
    a=[1.0, 2.0, 3.0, 4.0, 5.0, 6.0], 
    b=[1.0, 1.0, 1.0, np.NaN, 0.0, np.NaN],
    c=[0.9, np.NaN, 1.0, 0.0, 0.0, 0.0]
))

data.to_parquet('data.parquet')
Run Code Online (Sandbox Code Playgroud)

以及一本字典,它告诉我应该使用哪些值进行插补。然后我可以编写一个预处理函数。

import tensorflow as tf

impute_dictionary = dict(b=1.0, c=0.0)

def preprocessing_fn(inputs):
    outputs = inputs.copy()

    for key, value in impute_dictionary.items():
        outputs[key] = tf.where(
            tf.math.is_nan(outputs[key]),
            tf.constant(value, shape=outputs[key].shape),
            outputs[key]
        )

    return outputs
Run Code Online (Sandbox Code Playgroud)

并在 Apache Beam 管道中使用它

import tempfile

import apache_beam as beam
import tensorflow_transform.beam as tft_beam
from tensorflow_transform.tf_metadata import dataset_metadata, schema_utils …
Run Code Online (Sandbox Code Playgroud)

python tensorflow apache-beam tensorflow-transform tensorflow2.0

3
推荐指数
1
解决办法
1万
查看次数