为了账号安全,请及时绑定邮箱和手机立即绑定

给定一组要识别的图像和一个训练有素的模型,我如何让模型识别图像?

给定一组要识别的图像和一个训练有素的模型,我如何让模型识别图像?

素胚勾勒不出你 2022-01-18 17:29:53
如何让经过训练的模型识别我从其他地方提取的图像?该模型使用 MNIST 数据集进行训练,模型要识别的图像是从文档中提取的手写数字。使用的库是tensorflow 2.0、cv2和numpy。据我了解,model.predict()确定其输入。我的意思是,如果我在那里以某种形式输入“3”的手写图像,它将识别并输出“3”。同样,这说model是使用基于这组教程的 MNIST 数据集进行训练的。假设是,我想知道函数的参数,或者我将如何格式化图像/图像集以获得预期的输出。如果没有,我想知道我将如何准确地做到这一点。import cv2import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom tensorflow import keras# Load and prepare the MNIST dataset. Convert the samples from integers to floating-point numbers:(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()x_train, x_test = x_train / 255.0, x_test / 255.0def createModel():    # Build the tf.keras.Sequential model by stacking layers.   # Choose an optimizer and loss function used for training:  model = tf.keras.models.Sequential([    keras.layers.Flatten(input_shape=(28, 28)),    keras.layers.Dense(128, activation='relu'),    keras.layers.Dropout(0.2),    keras.layers.Dense(10, activation='softmax')  ])  model.compile(optimizer='adam',                loss='sparse_categorical_crossentropy',                metrics=['accuracy'])  return modelmodel = createModel()model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))model.evaluate(x_test, y_test)c = cv2.imread("./3.png", 1)c = c.reshape(-1, 28*28)/255.0# now what?我预计model.predict()会做我需要的。到目前为止,这是我的尝试:model.predict(c) 输出 TypeError: predict() missing 1 required positional argument: 'x'model.predict([""], c)输出ValueError: When using data tensors as input to a model, you should specify the步骤argument.等等。我知道在这一点上我会盲目和错误地进入。朝着正确方向迈出的任何一步都值得赞赏。谢谢!编辑:所以我知道输入图像c应该是灰度 28x28 甚至在重塑之前,所以我尝试跳过它。我实现预测时出现的错误是:...tensorflow.python.framework.errors_impl.InvalidArgumentError: Matrix size-incompatible: In[0]: [28,28], In[1]: [784,128]     [[{{node dense/MatMul}}]] [Op:__inference_keras_scratch_graph_2593]所以我c = c.reshape(-1, 28*28)/255.0在预测之前使用过,但它从来没有预测任何数字的正确值。然后我尝试用它cv2.imshow(str(predicted_value), c)来显示输入图像的样子。显示的图像只是黑色和白色斑点的细线。由于我仍然无法链接图像,因此这里是指向输出的链接。我的问题是,这是否是模型的图像应该看起来的样子?或者我可能搞砸了?谢谢!
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

当您的模型使用灰度图像进行训练时,它期望输入图像是灰度的。RGB 图像有 3 个通道。灰度图像只有 1 个通道。

因此,当加载图像而不是代表cv2.IMREAD_COLOR的1时,使用对应于cv2.IMREAD_GRAYSCALE的0以灰度模式加载图像。

(注意:使用-1表示cv2.IMREAD_UNCHANGED有关详细信息,请参阅此处的 opencv 文档)

yourimage = cv2.imread("yourimage.png", 0)

对于预测,在重塑后,您可以使用:

predicted_value = np.argmax(model.predict(yourimage))


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信