一旦模型拟合,Keras 如何评估单个图像

Posted

技术标签:

【中文标题】一旦模型拟合,Keras 如何评估单个图像【英文标题】:Keras how to evaluate a single image once model has been fit 【发布时间】:2020-09-11 12:26:54 【问题描述】:

我现在刚刚学习 Keras,我按照教程创建了一个非常好的并且运行良好的图像分类模型。

但是,现在,我想更进一步,一次输入一张图像,让它尝试对其进行分类。我认为这在概念上应该相当简单,但我可能误解了一些基本的东西。

这是我的模型:

model = Sequential()

model.add(Conv2D(32,(3,3), input_shape=x_train.shape[1:], padding='same'))
model.add(Activation('relu'))

model.add(Dropout(0.2))

model.add(BatchNormalization())

model.add(Conv2D(64, (3,3), padding='same'))
model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(.2))
model.add(BatchNormalization())

所以当我运行这个时,我也使用了:

model.save_weights('cif_weights.h5')
model.save('cif_model.h5')

现在我想将这些重新加载到不同的脚本中,让它加载单个图像,对其进行分类并吐出它认为的内容。

我最初认为您会使用 model.evaluate(xtest, ytest) 并且只使用 xtest 数据和 ytest 数据的 1 个图像,但这给我的模型整体带来了 1 个损失和 1 个准确度,并没有说明我是一个实际的分类。

作为参考,我使用 CIFAR-10 数据集进行训练,因此是这 10 个不同的类别。

如果有人能指出我解释的地方,甚至在 Keras 文档中。

【问题讨论】:

如果您使用数据生成器,这应该可以工作:***.com/questions/52270177/… 【参考方案1】:

如果我误解了您的问题,我深表歉意,但我认为您是在询问如何将经过训练和保存的模型“cif_weights.h5”加载到另一个 python 脚本中,您可以在其中加载图像并使用所述模型对所述图像进行分类。

使用您的模型,确保将 load_model 从 keras 导入到您的新脚本中。

接下来,获取您要预测的图像,并使其与网络接受的尺寸相同。

假设您的网络在 50x50 像素的图像上进行了训练,您必须将图像转换为 1x50x50 的 numpy 数组。

这可以通过首先加载您要预测的图像来完成,假设变量是 img,它是一个 100x100 的 numpy 数组。使用:

img.reshape(50,50) # replace 50,50 with whatever dimensions your network was trained on

然后将第一个维度添加到数组中:

img = img[numpy.newaxis,:,:]

最后你可以加载你的模型并进行预测:

model=load_model('cif_weights.h5')
prediction = model.predict(img)

我们得到的这个新“预测”将是一个长度为 10 的向量,代表模型预测您的新图像分类的内容。如果你想直接找到这个图像上的权重预测,你可以使用

numpy.argmax(prediction)

这将返回网络根据当前权重预测图像所属的类别。

【讨论】:

嗨,乔治,谢谢,这让我走上了正轨。最后,我使用 OpenCV 对单个图像进行预处理,因为对 numpy 数组进行通用整形最初不起作用。谢谢!红衣作家

以上是关于一旦模型拟合,Keras 如何评估单个图像的主要内容,如果未能解决你的问题,请参考以下文章

Keras:过拟合模型?

模型评估之过拟合和欠拟合

如何在 keras 中拟合两个连接 LSTM 的模型?

如何在 Keras 模型中训练和验证样本较小时测量过拟合

如何提高keras模型的准确率,防止过拟合

机器学习中的模型选择和评估