从谷歌教程我们知道如何在TensorFlow中训练模型.但是保存训练模型的最佳方法是什么,然后在生产服务器中使用基本的最小python api进行预测.
我的问题基本上是针对TensorFlow保存模型并在实时服务器上提供预测而不影响速度和内存问题的最佳实践.由于API服务器将永远在后台运行.
一小段python代码将不胜感激.
我想在我导出的Keras模型中包含我的自定义预处理逻辑,以用于Tensorflow服务.
我的预处理执行字符串标记化并使用外部字典将每个标记转换为索引以输入到嵌入层:
from keras.preprocessing import sequence
token_to_idx_dict = ... #read from file
# Custom Pythonic pre-processing steps on input_data
tokens = [tokenize(s) for s in input_data]
token_idxs = [[token_to_idx_dict[t] for t in ts] for ts in tokens]
tokens_padded = sequence.pad_sequences(token_idxs, maxlen=maxlen)
Run Code Online (Sandbox Code Playgroud)
模型架构和培训:
model = Sequential()
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128, activation='sigmoid'))
model.add(Dense(n_classes, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
model.fit(x_train, y_train)
Run Code Online (Sandbox Code Playgroud)
由于该模型将用于Tensorflow服务,我想将所有预处理逻辑合并到模型本身(在导出的模型文件中编码).
问:我怎样才能使用Keras库?
我发现本指南解释了如何结合Keras和Tensorflow.但我仍然不确定如何将所有东西都作为一个模型出口.
我知道Tensorflow有内置的字符串拆分,文件I/O和字典查找操作.
使用Tensorflow操作的预处理逻辑:
# Get input text
input_string_tensor = tf.placeholder(tf.string, shape={1})
# Split input text by …Run Code Online (Sandbox Code Playgroud) 我tf.contrib.lookup使用训练数据(作为输入)创建一个查找表.然后,我通过该查找表传递每个输入,然后通过我的模型.
这适用于训练,但是当涉及到来自同一模型的在线预测时,它会引发错误:
表未初始化
我正在使用SavedModel保存模型.我从这个保存的模型中运行预测.
如何初始化此表以使其保持初始化状态?或者有更好的方法来保存模型,以便始终初始化表格?
最近我试图使用tensorflow服务部署深度学习服务.但是在导出模型时我得到以下信息:
INFO:tensorflow: No assets to save
INFO:tensorflow: No assets to write
INFO:tensorflow: SavedModel written to: b'./models/1/saved_model.pb'
Run Code Online (Sandbox Code Playgroud)
我真的不明白这里发生了什么."无资产保存/写入"是什么意思?一切顺利吗?顺便说一句,通过运行官方示例服务张量流模型,我得到了相同的信息.
我对TensorFlow有很多经验,我即将开始一个项目,最终将在C#生产环境中使用TensorFlow训练模型.从本质上讲,我将拥有将进入C#环境的实时数据,我最终需要根据TensorFlow中模型的输出输出决策/采取某些操作.这基本上只是现有基础设施的一个约束.
我可以想到实现这一点的几种可能不好的方法,例如将数据写入磁盘然后调用应用程序的Python部分,然后最终读取Python应用程序的结果输出并根据它执行一些操作.然而,这很慢.
是否有更快的方法来实现C#和基于Python的Tensorflow之间的相同集成关系.我看到似乎有一些方法可以用C++和TensorFlow来做到这一点,但是C#呢?
我已经导出了一个SavedModel,现在我用它来加载它并进行预测.它经过培训,具有以下功能和标签:
F1 : FLOAT32
F2 : FLOAT32
F3 : FLOAT32
L1 : FLOAT32
Run Code Online (Sandbox Code Playgroud)
所以说我想要在值中20.9, 1.8, 0.9得到一个单一的FLOAT32预测.我该如何做到这一点?我已成功加载模型,但我不知道如何访问它来进行预测调用.
with tf.Session(graph=tf.Graph()) as sess:
tf.saved_model.loader.load(
sess,
[tf.saved_model.tag_constants.SERVING],
"/job/export/Servo/1503723455"
)
# How can I predict from here?
# I want to do something like prediction = model.predict([20.9, 1.8, 0.9])
Run Code Online (Sandbox Code Playgroud)
这个问题与此处发布的问题不重复.这个问题集中在SavedModel对任何模型类(不仅限于tf.estimator)和对指定输入和输出节点名称的语法进行推理的最小示例.
背景:
我有一个基于tf.estimator.DNNClassifier的简单分类器,它通过intent标签获取文本和输出概率.我能够训练将模型输出到可服务的以及使用tensorflow服务服务于服务.问题是这个可服务性太大(大约1GB),因此我想尝试一些张量流图变换来尝试减少所服务文件的大小.
问题:
我理解如何saved_model.pb使用和使用freeze_model.py来创建一个.pb可用于调用转换的新文件.这些转换的结果(.pb文件也是如此)不可用,不能与tensorflow服务一起使用.
开发者如何来自:
saved model -> graph transforms -> back to a servable
Run Code Online (Sandbox Code Playgroud)
有文档表明这肯定是可能的,但从文档到关于如何做到这一点并不直观.
我试过的:
import tensorflow as tf
from tensorflow.saved_model import simple_save
from tensorflow.saved_model import signature_constants
from tensorflow.saved_model import tag_constants
from tensorflow.tools.graph_transforms import TransformGraph
with tf.Session(graph=tf.Graph()) as sess_meta:
meta_graph_def = tf.saved_model.loader.load(
sess_meta,
[tag_constants.SERVING],
"/model/path")
graph_def = meta_graph_def.graph_def
other_graph_def = TransformGraph(
graph_def,
["Placeholder"],
["dnn/head/predictions/probabilities"],
["quantize_weights"])
with tf.Graph().as_default(): …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Tensorflow服务项目从HDFS中提供Tensorflow模型.
我正在运行tensorflow服务docker容器标签1.10.1 https://hub.docker.com/r/tensorflow/serving
我可以在https://github.com/tensorflow/serving/blob/628702e1de1fa3d679369e9546e7d74fa91154d3/tensorflow_serving/model_servers/BUILD#L341上看到引用Hadoop的tensorflow/serve repo
"@org_tensorflow//tensorflow/core/platform/hadoop:hadoop_file_system"
Run Code Online (Sandbox Code Playgroud)
这是一个参考
我设置了以下环境变量:
我将Hadoop挂载到docker容器中,可以使用docker exec验证它.
当我运行docker容器时,我在日志中得到以下内容:
tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:369] FileSystemStoragePathSource encountered a file-system access error: Could not find base path hdfs://tensorflow/models/my_model for servable my_model
Run Code Online (Sandbox Code Playgroud)
我找到了Tensorflow使用HDFS进行培训的示例,但没有使用Tensorflow服务从HDFS服务模型.
Tensorflow服务能否为HDFS服务?如果是这样,你怎么做?
我的理解是,我应该能够从 Google 的 AI Hub 获取 TensorFlow 模型,将其部署到 TensorFlow Serving 并使用它通过使用 curl 的 REST 请求发布图像来进行预测。
我目前在 AI Hub 上找不到任何 bbox 预测器,但我确实在 TensorFlow 模型动物园中找到了一个:
http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz
我已将模型部署到 TensorFlow 服务,但文档并不清楚 REST 请求的 JSON 中应包含哪些内容。
我的理解是
我能够像这样获得模型的签名定义:
>python tensorflow/tensorflow/python/tools/saved_model_cli.py show --dir /Users/alexryan/alpine/git/tfserving-tutorial3/model-volume/models/bbox/1/ --all
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['in'] tensor_info:
dtype: DT_UINT8
shape: (-1, -1, -1, 3)
name: image_tensor:0
The given SavedModel SignatureDef contains …Run Code Online (Sandbox Code Playgroud)