是否有规范的方法来维持Tensorflow服务的有状态LSTM等?
直接使用Tensorflow API这很简单 - 但我不确定在将模型导出到Serving之后如何最好地在调用之间实现持久的LSTM状态.
有什么例子可以实现上述目标吗?回购中的样品非常基本.
问题:
Tensorflow Saver,Exporter,SavedModelBuilder都可以用于保存模型.根据 /sf/ask/2921807101/和张量流服务,我知道Saver用于保存训练检查点和Exporter和SavedModelBuilder用于服务.
但是,我不知道他们的产出的差异.是变量.data - ??? - of - ??? 和SavedModelBuilder生成的variable.index文件与cpkt-xxx.index和cpkt-xxx.data相同 - ??? - of - ??? Saver生成的?
我仍然对tensorflow的模型文件的含义感到困惑.我读过http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/和Tensorflow:如何保存/恢复模式?这让我感到更加困惑.
模型目录中有4个文件:
文件2和4存储变量的权重.文件3存储图表.然后1商店是什么?
如何将Saver的输出转换为SavedModelBuilder.我有检查点目录,并希望导出模型以进行服务.根据https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python/saved_model
它应该是这样的
export_dir = ...
...
builder = tf.saved_model.builder.SavedModelBuilder(export_dir)
with tf.Session(graph=tf.Graph()) as sess:
...
builder.add_meta_graph_and_variables(sess,
[tf.saved_model.tag_constants.TRAINING],
signature_def_map=foo_signatures,
assets_collection=foo_assets)
...
with tf.Session(graph=tf.Graph()) as sess:
...
builder.add_meta_graph(["bar-tag", "baz-tag"])
...
builder.save()
Run Code Online (Sandbox Code Playgroud)
所以,我首先需要加载检查点:
saver = tf.train.import_meta_graph('model-number.meta')
saver.restore(sess, tf.train.latest_checkpoint('./'))
Run Code Online (Sandbox Code Playgroud)
然后将其sess用于构建器.
我对吗?
谷歌云文档(请参阅预测输入中的二进制数据)指出:
必须将编码的字符串格式化为JSON对象,并使用名为b64的单个键.以下Python示例使用base64库对原始JPEG数据的缓冲区进行编码以生成实例:
Run Code Online (Sandbox Code Playgroud){"image_bytes":{"b64": base64.b64encode(jpeg_data)}}在TensorFlow模型代码中,您必须为输入和输出张量命名别名,以便它们以'_bytes'结尾.
我想了解更多有关此过程如何在Google云端运行的信息.
ml-engine是否会自动将"b64"字符串之后的任何内容解码为字节数据?
当请求具有此嵌套结构时,它是否仅将"b64"部分传递给服务输入函数并删除"image_bytes"键?
每个请求是单独传递给服务输入函数还是已经批处理?
我们是否在服务输入函数返回的ServingInputReceiver中定义输入输出别名?
我发现无法创建服务输入函数,该函数使用此嵌套结构来定义要素占位符.我只在我的中使用"b64"而且我不确定gcloud ml-engine在接收请求时会做什么.
另外,当在本地使用预测时gcloud ml-engine local predict,发送具有嵌套结构的请求失败,(意外的密钥image_bytes,因为它没有在服务输入函数中定义).但是在预测使用时gcloud ml-engine predict,即使服务输入函数不包含对"image_bytes"的引用,使用嵌套结构发送请求也能正常工作.当忽略"image_bytes"并传入"b64"时,gcloud预测也有效.
服务输入功能的示例
def serving_input_fn():
feature_placeholders = {'b64': tf.placeholder(dtype=tf.string,
shape=[None],
name='source')}
single_image = tf.decode_raw(feature_placeholders['b64'], tf.float32)
inputs = {'image': single_image}
return tf.estimator.export.ServingInputReceiver(inputs, feature_placeholders)
Run Code Online (Sandbox Code Playgroud)
我使用图像给出了示例,但我假设同样适用于作为字节和base64编码发送的所有类型的数据.
有很多stackoverflow问题,其中包含对包含"_bytes"信息片段的需求的引用,但我觉得如果有人可以详细解释一下这些内容会有什么用,那么我就不会如此受欢迎格式化请求时错过.
Stackoverflow关于此主题的问题
gcloud tensorflow-serving google-cloud-ml tensorflow-estimator
我按照以下指南编写了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
我有一个训练有素的Tensorflow模型,我想用REST API提供预测方法.我能想到的是使用Flask构建一个接收JSON作为输入的简单REST API,然后在Tensorflow中调用predict方法,然后将预测结果返回给客户端.
我想知道是否有任何关注,特别是在生产环境中这样做?
非常感谢!
我使用以下命令"docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel"安装了TensorFlow,我需要在Windows机器上设置TensorFlow服务.我按照" https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/setup.md "中的说明进行操作,并在安装TensorFlow服务依赖项时运行下面提到的sudo命令:
docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel
Run Code Online (Sandbox Code Playgroud)
显示以下错误:
sudo apt-get update && sudo apt-get install -y \
build-essential \
curl \
git \
libfreetype6-dev \
libpng12-dev \
libzmq3-dev \
pkg-config \
python-dev \
python-numpy \
python-pip \
software-properties-common \
swig \
zip \
zlib1g-dev
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Ubuntu上构建Tensorflow服务.我已经从源代码编译了Tensorflow和Tensorflow而没有错误,但是当我运行时:
bazel test -c opt tensorflow_serving/...
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
//tensorflow_serving/model_servers:tensorflow_model_server_test
TIMEOUT in 315.1s
Run Code Online (Sandbox Code Playgroud)
所有其他测试都通过了.
当我查看日志文件时,我只看到以下内容:
exec ${PAGER:-/usr/bin/less} "$0" || exit 1
Run Code Online (Sandbox Code Playgroud)
我不知道错误是什么,或模型服务器测试失败的原因.
我正在尝试使用tensorflow hub的嵌入模块作为可服务.我是tensorflow的新手.目前,我使用Universal Sentence Encoder嵌入作为查找将句子转换为嵌入,然后使用这些嵌入来查找与另一个句子的相似性.
我目前将句子转换为嵌入的代码是:
with tf.Session() as session:
session.run([tf.global_variables_initializer(), tf.tables_initializer()])
sen_embeddings = session.run(self.embed(prepared_text))
Run Code Online (Sandbox Code Playgroud)
Prepared_text是一个句子列表.如何使用此模型并使其成为可维护的?
我目前正在尝试为使用 Tensorflow 的 dnn 预制估计器构建的模型提供 TF 服务。我很高兴看到带有 Tensorflow Serving 1.8 的 Restful API 的发布。
但是,如果我们可以指定包含输入和输出的内容,我看不到如何管理基本身份验证。
预先感谢您的建议。问候。
我已经部署了一个模型,该模型使用 tfhub 模型来使用 docker 进行 tensorflow 服务。
这是我的模型中包含的 tfhub 模型:
https://tfhub.dev/google/universal-sentence-encoder-multilingual/1
这是运行docker的命令
docker run -t --rm -p 8501:8501 \
-v "/docker_dir/model_tf_serving:/models/mymodel" \
-e MODEL_NAME=mymodel \
tensorflow/serving &
Run Code Online (Sandbox Code Playgroud)
发生错误:
Not found: Op type not registered 'SentencepieceEncodeSparse' in binary running on c5e507bf091b. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) `tf.contrib.resampler` should be done before importing the graph, as …Run Code Online (Sandbox Code Playgroud)