`decode_predictions` 需要一批预测(即形状的二维数组(样本,1000))。找到形状为 (1, 5) 的数组

`decode_predictions` expects a batch of predictions (i.e. a 2D array of shape (samples, 1000)). Found array with shape: (1, 5)

A 为我自己的测试数据重新训练了 inception_v3 模型。 (背景故事:我只是想了解整个过程的工作原理,然后再在我的 130 class "problem" 上尝试)

现在我得到了 .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 classes),但我没有。 我如何创建这样的向量并将所有 1000-my_num_of_classes(在我的例子中是 5)设置为喜欢 0? 我想我必须预先整形一个大小为 1000 的二维数组。但它不明白 "samples" 或在我的例子中“1”代表什么。 或者我是否必须为我的 [1.0592173e-07 8.3998479e-09 9.9305904e-01 4.8276172e-05 6.8924953e-03] 数组编写一些匹配项(在我的例子中)。我在哪里解释 3 (id 2) class(受过训练)的概率最高? 所以也许就像一个文件,我按顺序排列了所有受过训练的 classes ?将最高值与相应的行(标签)相匹配?

会很棒:)

这就是我的预测代码

# 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 模型的 class 预测转换为相应的人类可读 ImageNet classes。

仅当您的模型输出 ImageNet classes(1000 维)时,使用 "decode_predictions" 才有意义。您的模型 (my_model) 似乎 return 超过 5 class 的预测。这不是 ImageNet 模型。