tensorflow - `decode_predictions` 需要一批预测(即形状的二维数组(样本,1000))。找到具有形状的数组:(1, 5)
问题描述
A 为我自己的测试数据重新训练了 inception_v3 模型。(背景故事:我只是想了解整个过程是如何工作的,然后再尝试我的 130 课“问题”)
现在我得到了.h5。我尝试导入它并预测一些图像。但我只收到以下错误消息。
ValueError: `decode_predictions` expects a batch of predictions (i.e. a 2D array of shape (samples, 1000)). Found array with shape: (1, 5)
有人可以告诉我我做错了什么吗?
我的想法:我读到一些我需要 1000 个概率的向量(对于 1000 个类),但我没有它们。我如何创建这样的向量并将所有 1000-my_num_of_classes(在我的情况下为 5)设置为 0?我想我必须预先塑造一个大小为 1000 的二维数组。但它不明白“样本”或在我的情况下“1”代表什么。或者我是否必须为我的数组 [1.0592173e-07 8.3998479e-09 9.9305904e-01 4.8276172e-05 6.8924953e-03] (在我的情况下)写一些匹配。我在哪里解释 3(id 2)类(受过训练)具有最高概率?所以也许就像一个文件,我有所有受过训练的课程,就像受过训练一样?匹配最高的行(标签)?
会很棒:)
那将是我的预测代码
# Testing Inceptionv3
#from keras.applications.imagenet_utils import decode_predictions
import numpy as np
from keras.applications.inception_v3 import decode_predictions
import matplotlib.pyplot as plt
import os
from keras.models import load_model
from PIL import Image
my_model = load_model('my_model.h5')
#images = transform_img_fn([os.path.join('data','rose.jpg')])
img = Image.open('./data/rose.jpg')
img = img.resize((150,150))
img = np.array(img)
img = img / 255.0
img = img.reshape(1,150,150,3)
#base_model = inc_net.InceptionV3(weights='imagenet', include_top=False)
preds = my_model.predict(img)
for x in decode_predictions(preds)[0]:
print(x)
解决方案
该decode_predictions
实用程序将预训练的 ImageNet 模型的类预测转换为相应的人类可读的 ImageNet 类。
仅当您的模型输出 ImageNet 类(1000 维)时,使用“decode_predictions”才有意义。您的模型 ( my_model
) 似乎返回了超过 5 个类别的预测。它不是 ImageNet 模型。
推荐阅读
- php - PHP如何获取点击链接的名称?
- laravel - 如何在使用 Laravel 的查询中从嵌套关系中选择特定列
- php - wordpress,让面包屑回忆页面的title h1value
- python - 处理列条目中的分隔符 pandas
- json - 为什么我在数字海洋上收到 npm 部署错误?
- wordpress - 在自定义帖子类型中查询部分 ACF 文本字段
- autodesk-forge - 覆盖文件的奇怪查看器行为
- c# - 如何使用 WireMock.NET 存根 gRPC 或 HTTP/2 请求?
- python - 将 url 修改为 pandas 中的列
- r - 关于 R 中未加权 ANES 调查的问题