`decode_predictions`需要一批预测(即2D形状阵列(样本,1000))。找到形状有阵列:(1,5)

时间:2018-06-06 21:41:32

标签: tensorflow keras deep-learning keras-2

为我自己的测试数据重新训练了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)

1 个答案:

答案 0 :(得分:4)

npm install react react-dom实用程序将预训练的ImageNet模型的类预测转换为相应的人类可读ImageNet类。

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