张量将包含预测类 id 的索引。但是,我们需要一个人类可读的类名。为此,我们需要一个类 ID 到名称映射。下载[此文件](https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json)并记住您保存它的位置(或者,如果您正在按照本教程中的确切步骤进行操作,将其保存在 *tutorials/_static* )。此文件包含 ImageNet 类 ID 到`y_hat`的映射 ImageNet 类名。我们将加载这个`imagenet_class_index.json` JSON 文件并获取预测的索引。
with open("../_static/img/sample_file.jpeg", 'rb') as f:
image_bytes = f.read()
print(get_prediction(image_bytes=image_bytes))
```
您应该得到如下响应:
```
['n02124075', 'Egyptian_cat']
```
数组中的第一项是 ImageNet类ID,第二项是人类可读名称。
> 注意
>
> 您是否注意到变量不是方法的一部分?或者为什么模型是全局变量?加载`model`模型在内存和计算方面操作成本高昂。如果我们在方法中加载模型,那么它将不必要地加载调用`get_prediction`方法的时间。由于我们正在构建一个 Web 服务器,因此每秒可能有数千个请求,我们不应该浪费时间为每个`get_prediction`推理冗余加载模型。所以,我们保留模型在内存中仅加载一次。在生产系统,有必要有效地使用计算能够大规模地处理请求,因此通常应该在处理请求之前加载模型。
## 将模型集成到我们的 API 服务器中
在最后一部分中,我们将模型添加到 Flask API 服务器。因为我们的 API 服务器应该获取一个图像文件`predict`,我们将更新我们的方法以从请求中读取文件: