Python Keras如何在模型拟合后评估单个图像

Python Keras如何在模型拟合后评估单个图像,python,tensorflow,keras,Python,Tensorflow,Keras,我现在正在学习Keras,我遵循了一个教程,创建了一个图像分类模型,这个模型非常好,运行良好 然而,现在,我想更进一步,一次只给它一张图片,让它尝试分类。我认为这在概念上应该相当简单,但我可能误解了一些基本的东西 这是我的模型: model = Sequential() model.add(Conv2D(32,(3,3), input_shape=x_train.shape[1:], padding='same')) model.add(Activation('relu')) model.a

我现在正在学习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个准确性,并且没有告诉我实际的分类

作为参考,我正在使用CIFAR-10数据集进行培训,因此这是10个不同的课程


如果有人能告诉我在什么地方解释了这一点,或者甚至在Keras文档中解释了这一点。

如果我误解了你的问题,我很抱歉,但我理解你是在问如何将经过训练和保存的模型“cif_weights.h5”加载到另一个python脚本中,在该脚本中加载一个图像,并使用所述模型对所述图像进行分类

使用模型时,请确保将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阵列上进行常规整形一开始是行不通的。谢谢红衣主教