本站消息

站长简介/公众号


站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群.欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

MSINT - 图像分类 - 值错误不兼容的形状

发布于2022-01-23 14:36     阅读(1213)     评论(0)     点赞(18)     收藏(0)



我从使用 keras 的图像分类开始。尝试了一个简单的 minst 数据集来检测图像中的数字。运行模型。但是我想在我自己的数据集上测试模型并面临一些问题。

    import tensorflow as tf
    import matplotlib.pyplot as plt
    
    msint = tf.keras.datasets.mnist #28x28 images of hand written digits 0-9
    (x_train, y_train), (x_test,y_test) = msint.load_data()
    
    
    x_train = tf.keras.utils.normalize(x_train,axis=1)
    x_test = tf.keras.utils.normalize(x_test,axis=1)
    
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))
    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
    model.fit(x_train,y_train, epochs=3)

#Testing on my own image data
img2 = cv2.imread("981_cropped.jpg",cv2.IMREAD_GRAYSCALE)
(thresh, blackAndWhiteImage) = cv2.threshold(img2, 128, 255, cv2.THRESH_BINARY)

z_predict = tf.keras.utils.normalize(blackAndWhiteImage,axis=1)
predictions = new_model.predict([z_predict])

错误:

警告:张量流:模型是用形状 (None, 28, 28) 构造的输入 KerasTensor(type_spec=TensorSpec(shape=(None, 28, 28), dtype=tf.float32, name='flatten_input'), name=' flatten_input', description="created by layer 'flatten_input'"),但它是在形状不兼容的输入上调用的(无,28)。

ValueError:密集层的输入 0 与该层不兼容:输入形状的预期轴 -1 具有值 784,但接收到的输入具有形状(无,28)


解决方案


您应该在将图像输入网络之前调整其大小。该模型需要一个 shape 的图像(28,28)

  • 像这样调整图像大小: img2 = cv2.resize(img2, (28, 28 ))

  • 由于模型需要批量维度,您应该向图像添加另一个维度,如下所示: z_predict = tf.expand_dims(z_predict,axis=0)

  • 请注意,预测将是每个类别的概率。如果你想得到预测的类数,你可以使用np.argmax(prediction).

修改后的代码应该是这样的:

import cv2
img2 = cv2.imread("981_cropped.jpg",cv2.IMREAD_GRAYSCALE)
img2 = cv2.resize(img2, (28, 28 ))      #resize image
(thresh, blackAndWhiteImage) = cv2.threshold(img2, 128, 255, cv2.THRESH_BINARY)

z_predict = tf.keras.utils.normalize(blackAndWhiteImage,axis=1)

z_predict = tf.expand_dims(z_predict,axis=0)  # add batch dimension
predictions = model.predict(z_predict)
np.argmax(predictions)  # get predicted class

站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群
欢迎关注我的公众号:程序员总部,关注公众号回复python,免费领取 全套python视频教程,关注公众号回复充值+你的账号,免费为您充值1000积分







所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1256586/f08faedfeffc1324bd4a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0
收藏该文
已收藏

评论内容:(最多支持255个字符)