谷歌云文档(请参阅预测输入中的二进制数据)指出:
必须将编码的字符串格式化为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
我有一个google-cloud-ml模型,我可以通过传递float32的3维数组运行预测...
{ 'instances' [ { 'input' : '[ [ [ 0.0 ], [ 0.5 ], [ 0.8 ] ] ... ] ]' } ] }
然而,这不是传输图像的有效格式,因此我想传递base64编码的png或jpeg. 本文档讨论了这样做,但不清楚的是整个json对象是什么样的.是否{ 'b64' : 'x0welkja...' }代替了'[ [ [ 0.0 ], [ 0.5 ], [ 0.8 ] ] ... ] ]',留下封闭的"实例"和"输入"相同?还是其他一些结构?或者,张量流模型是否必须在base64 上进行训练?