一旦模型拟合,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 如何评估单个图像的主要内容,如果未能解决你的问题,请参考以下文章