无法预测 ImageNet 类的输入 [Keras + Tensorflow]

Posted

技术标签:

【中文标题】无法预测 ImageNet 类的输入 [Keras + Tensorflow]【英文标题】:Cannot predict input from ImageNet classes [Keras + Tensorflow] 【发布时间】:2017-04-17 00:30:22 【问题描述】:

我关注了这个 repo (https://github.com/iamgroot42/keras-finetuning),我已经完成了培训。

现在,我想预测我自己的数据集(包含 2 个类,鳄梨和芒果)和 ImageNet 集的输入图像。但预测结果总是返回索引 0 或 1(我猜是鳄梨或芒果),从不返回 ImageNet 中的类。例如。我想预测来自 ImageNet 原始类的 iPod 图像,但 model.predict(...) 总是返回 0 和 1。

我的模型标签.json:

["avocados", "mangos"]

我的预测代码:

img = imresize(imread('ipod.png', mode='RGB'), (224, 224)).astype(np.float32)
img[:, :, 0] -= 123.68
img[:, :, 1] -= 116.779
img[:, :, 2] -= 103.939
img[:,:,[0,1,2]] = img[:,:,[2,1,0]]
img = img.transpose((2, 0, 1))
img = np.expand_dims(img, axis=0)
img = img.reshape(img.shape[0], n, n, n_chan)

out = model.predict(img, batch_size=batch_size)
pred = np.argmax(out, axis=1)

print(pred)

有人可以帮助我吗?

【问题讨论】:

你能发布你的模型定义吗? @avijit-dasgupta 这是完整的脚本:github.com/iamgroot42/keras-finetuning/blob/master/net.py 【参考方案1】:

也许您只需要在class indeximagenet labels 之间进行转换?

尝试:

from imagenet_utils import decode_predictions

[...]

img = imresize(imread('ipod.png', mode='RGB'), (224, 224)).astype(np.float32)
img[:, :, 0] -= 123.68
img[:, :, 1] -= 116.779
img[:, :, 2] -= 103.939
img[:,:,[0,1,2]] = img[:,:,[2,1,0]]
img = img.transpose((2, 0, 1))
img = np.expand_dims(img, axis=0)
img = img.reshape(img.shape[0], n, n, n_chan)

out = model.predict(img, batch_size=batch_size)
#add decoding line here to get the top 3
print('Predicted:', decode_predictions(out, top=3)[0])

大小)

【讨论】:

以上是关于无法预测 ImageNet 类的输入 [Keras + Tensorflow]的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中的多分类预测不止一个?

Keras:ValueError:decode_predictions 需要一批预测

Keras 替换输入层

Keras 函数模型验证准确率高,但预测不正确

错误 "IndexError: 如何在Keras中使用训练好的模型预测输入图像?

使用 Keras 进行异常检测 - 低预测率