我正在为tensorflow应用程序构建后端,基本上在我进行分类之后,我想以JSON格式将结果返回给客户端。
因此,在我的分类后,我得到两个值"name"
和"%"
import json
from flask import Flask, jsonify, request, Response #import objects from the Flask model
app = Flask(__name__) #define app using Flask
基本上,这会在变量Items
中返回此字典 {'moulin de la galette renoir': 0.0080302889, 'les demoiselles d avignon picassso': 0.7823543, 'starry night over the rhone van gogh': 0.01457829, 'wheatfields with crows van gogh': 0.049212866, 'guernica picassso': 0.14582427}
classify()
do some code here ...
# Sort to show labels of first prediction in order of confidence
top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
#items within object
items = {}
for node_id in top_k:
human_string = label_lines[node_id]
score = predictions[0][node_id]
#stores human string and score in item
items[human_string] = score
return items
@app.route('/inception', methods=['POST'])
def inception():
if 'file' not in request.files:
return jsonify({'message' : 'failed'})
file = request.files['file']
output = classify(file)
#print just to see the format of the output
print(output)
return Response(json.dumps(output), mimetype='application/json')
这应该以json形式回发项目,但事实并非如此。
如果来自classify(),我硬编码与输出相同的完全相同的值。
所以:
return {'moulin de la galette renoir': 0.0080302889, 'les demoiselles d avignon picassso': 0.7823543, 'starry night over the rhone van gogh': 0.01457829, 'wheatfields with crows van gogh': 0.049212866, 'guernica picassso': 0.14582427}
答案 0 :(得分:1)
弄清楚,基本上在张量流代码中,我没有包括我的得分值是一个numpy float 32类型。 Json转储无法转换这个以及它无法正常工作的原因。
score = float(predictions[0][node_id])
代码中的这一小改动解决了这个问题。总是确保您了解数据类型的经验教训。谢谢你们的帮助^^