首页 > 解决方案 > `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)

标签: tensorflowkerasdeep-learningkeras-2

解决方案


decode_predictions实用程序将预训练的 ImageNet 模型的类预测转换为相应的人类可读的 ImageNet 类。

仅当您的模型输出 ImageNet 类(1000 维)时,使用“decode_predictions”才有意义。您的模型 ( my_model) 似乎返回了超过 5 个类别的预测。它不是 ImageNet 模型。


推荐阅读