gpt4 book ai didi

python - Google Cloud ML Engine + Tensorflow 在 input_fn() 中执行预处理/标记化

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:49 25 4
gpt4 key购买 nike

我想在我的输入函数中执行基本的预处理和标记化。我的数据包含在 Google 云存储桶位置 (gs://) 的 csv 中,我无法修改。此外,我会对 ml-engine 包中的输入文本执行任何修改,以便可以在服务时复制该行为。

我的输入函数遵循以下基本结构:

filename_queue = tf.train.string_input_producer(filenames)
reader = tf.TextLineReader()
_, rows = reader.read_up_to(filename_queue, num_records=batch_size)
text, label = tf.decode_csv(rows, record_defaults = [[""],[""]])

# add logic to filter special characters
# add logic to make all words lowercase
words = tf.string_split(text) # splits based on white space

是否有任何选项可以避免提前对整个数据集执行此预处理?这个post建议 tf.py_func() 可用于进行这些转换,但是他们建议“缺点是,由于它没有保存在图中,所以我无法恢复我保存的模型”,所以我不相信这会有用在服务时间。如果我定义自己的 tf.py_func() 来进行预处理,并且它是在我上传到云的训练器包中定义的,我会遇到任何问题吗?还有其他我没有考虑的替代选择吗?

最佳答案

最佳实践是编写一个从训练/评估 input_fn 和服务 input_fn 调用的函数。

例如:

def add_engineered(features):
text = features['text']
features['words'] = tf.string_split(text)
return features

然后,在您的 input_fn 中,通过调用 add_engineered 包装您返回的功能:

def input_fn():
features = ...
label = ...
return add_engineered(features), label

并在serving_input fn中,确保通过调用add_engineered类似地包装返回的功能(而不是feature_placeholders):

def serving_input_fn():
feature_placeholders = ...
features = ...
return tflearn.utils.input_fn_utils.InputFnOps(
add_engineered(features),
None,
feature_placeholders
)

您的模型将使用“单词”。但是,您在预测时的 JSON 输入只需要包含“文本”,即原始值。

这是一个完整的工作示例:

https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/courses/machine_learning/feateng/taxifare/trainer/model.py#L107

关于python - Google Cloud ML Engine + Tensorflow 在 input_fn() 中执行预处理/标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com