Tensorflow服务ml引擎在线预测json文件格式

Tensorflow服务ml引擎在线预测json文件格式,tensorflow,machine-learning,lstm,tensorflow-serving,google-cloud-ml,Tensorflow,Machine Learning,Lstm,Tensorflow Serving,Google Cloud Ml,我想将Tensorflow模型保存到GCP上的ml引擎,并进行在线预测。 我已经在ml引擎上成功地创建了模型,但是,我正在努力将输入JSON字符串输入到模型中。 这是何塞·波蒂拉在Udemy上的Tensorflow课程的功劳 我用gcloud来预测: gcloud ml引擎predict--model='lstm_test'--version'v3'--json实例。/test.json test.json内容: {“输入”:[1,2,3,4,5,6,7,8,9,10,11,12]} 我得到的错

我想将Tensorflow模型保存到GCP上的ml引擎,并进行在线预测。
我已经在ml引擎上成功地创建了模型,但是,我正在努力将输入JSON字符串输入到模型中。 这是何塞·波蒂拉在Udemy上的Tensorflow课程的功劳

我用gcloud来预测:

gcloud ml引擎predict--model='lstm_test'--version'v3'--json实例。/test.json

test.json内容:

{“输入”:[1,2,3,4,5,6,7,8,9,10,11,12]}

我得到的错误:

{ “错误”:“预测失败:模型执行期间出错:中止错误(代码=StatusCode.INVALID_参数,详细信息=\”必须为带有dtype float和shape[?,12,1]的占位符张量“占位符_2”提供一个值\n\t[[节点:占位符_2=占位符_输出_形状=[?,12,1]],dtype=DT_float,shape=[?,12,1],\u设备=\“/job:localhost/replica:0/task:0/device:CPU:0\“]]\”” }


一般来说,使用示例proto作为输入并不是使用CloudML服务的首选方法。相反,我们将直接使用占位符

另外,一般来说,您应该创建一个干净的服务图,因此我还建议进行以下更改:

def构建图(x):
#给定输入x,在训练和预测之间共享所有代码
...
输出=。。。
#确保他们都有一个储蓄器。
saver=tf.train.saver()
返回输出,保存器
#训练
使用tf.Graph()作为预测图的默认值:
x=tf.placeholder(tf.float32,[None,num\u time\u steps,num\u inputs])
输出,保存器=构建图(x)
使用tf.Session(图=预测图)作为sess:
运行([tf.local\u variables\u initializer(),tf.tables\u initializer()]))
saver.restore(会话,最新)
#这是一个保存模型的简单界面。
tf.saved\u model.simple\u save(
sess,
export\u dir=SaveModel\u文件夹,
输入={“x”:x},
输出={“y”:输出}
)
现在,与
gcloud一起使用的文件应该如下所示:

[[1,1,1,1],[1,1,1,1],[1,1,1,1]]
[[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]
这将发送一批两个实例(每行一个实例/示例),并假设
num\u inputs
为4,
num\u time\u steps
为3

还有一个更重要的警告,gcloud的文件格式与使用传统客户端发送请求(例如JS、Python、curl等)时发送的请求的全文略有不同。与上述相同文件相对应的请求正文是:

{
“实例”:[
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
[[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]
]
}

基本上,
gcloud
文件中的每一行都成为“实例”数组中的一个条目。

一般来说,使用示例proto作为输入不是使用CloudML服务的首选方法。相反,我们将直接使用占位符

另外,一般来说,您应该创建一个干净的服务图,因此我还建议进行以下更改:

def构建图(x):
#给定输入x,在训练和预测之间共享所有代码
...
输出=。。。
#确保他们都有一个储蓄器。
saver=tf.train.saver()
返回输出,保存器
#训练
使用tf.Graph()作为预测图的默认值:
x=tf.placeholder(tf.float32,[None,num\u time\u steps,num\u inputs])
输出,保存器=构建图(x)
使用tf.Session(图=预测图)作为sess:
运行([tf.local\u variables\u initializer(),tf.tables\u initializer()]))
saver.restore(会话,最新)
#这是一个保存模型的简单界面。
tf.saved\u model.simple\u save(
sess,
export\u dir=SaveModel\u文件夹,
输入={“x”:x},
输出={“y”:输出}
)
现在,与
gcloud一起使用的文件应该如下所示:

[[1,1,1,1],[1,1,1,1],[1,1,1,1]]
[[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]
这将发送一批两个实例(每行一个实例/示例),并假设
num\u inputs
为4,
num\u time\u steps
为3

还有一个更重要的警告,gcloud的文件格式与使用传统客户端发送请求(例如JS、Python、curl等)时发送的请求的全文略有不同。与上述相同文件相对应的请求正文是:

{
“实例”:[
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
[[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]
]
}

基本上,
gcloud
文件中的每一行都成为“实例”中的一个条目“阵列。

非常感谢您的建议!我相应地更新了github上的代码,并修改了输入JSON文件,这有助于我进一步了解。但是,仍然存在一些问题。我已将错误包括在github问题中@Rhartel80i认为问题可能在于ml引擎运行时版本(1.4)与培训版本(1.7)不同,因为simple_save是1.7的一个特性。该代码适用于gcloud ml引擎本地预测@Rhartel80,你知道在ml引擎上提供运行时1.7的时间表是什么吗?也许你应该用新的问题来回答一个新的问题,因为匹配的版本经常会导致问题。我认为1.7应该在一周内非正式发布;它可能已经可以使用了。非常感谢您的建议!我相应地更新了github上的代码,并修改了输入JSON文件,这有助于我进一步了解。但是,仍然存在一些问题。我已将错误包括在github问题中@Rhartel80i认为问题可能在于ml引擎运行时版本(1.4)与培训版本(1.7)不同,因为simple_save是1.7的一个特性。该代码适用于gcloud ml引擎本地预测@Rhartel80,你知道运行时1.7的时间表是什么吗