【问题标题】:Convert 3D array image into 2D array将 3D 数组图像转换为 2D 数组
【发布时间】:2021-01-18 13:05:55
【问题描述】:

我正在尝试通过from tensorflow.keras.preprocessing import image 导入图像。我的图像是我在纸上写的手写数字,然后我通过手机从其中拍照,然后将其大小更改为 28*28:

我使用了以下代码:

img_width, img_height = 28, 28
img = image.load_img('rgb_seven.jpeg', target_size=(img_width, img_height))
img_tensor = image.img_to_array(img)
img_tensor.shape

形状结果是:

(28, 28, 3)

似乎图像被加载为 3D 数组。我需要一个二维数组,所以我这样做了:

x_image = img_tensor.reshape(len(img_tensor),-1)
x_image.shape

结果是:

(28, 84)

为什么是 84?我需要 28,因为我想将其展平以作为输入层插入。

什么问题?

【问题讨论】:

    标签: python python-3.x tensorflow keras deep-learning


    【解决方案1】:

    你应该使用color_mode='grayscale'加载图片

    img = image.load_img('rgb_seven.jpeg', color_mode='grayscale', target_size=(img_width, img_height))
    

    它会给你形状(28, 28, 1)

    然后使用x_image = img_tensor.reshape(28, 28) 会给你形状(28, 28)

    你得到形状(28, 84) 的原因是因为reshape() 不会删除维度,所以如果你想使用img_tensor.reshape(28,-1)(28, 28, 3) 重塑数组,它将返回一个数组作为最后两个维度的组合这样你就得到了形状(28, 28 * 3)

    【讨论】:

    • 你知道吗,为什么我的模型有 99% 的准确率,我的 8 位图像预测为 3 pasteboard.co/JKdyUF4.png @Mr.ForExample
    • @sayreskabir 你是如何训练模型的?您的数据集是否将图像与正确的标签配对?不幸的是,我认为该屏幕截图中的信息不足以调试问题,如果找不到答案,您可以考虑使用代码打开一个新问题
    • 我是深度学习的新手。这是我所有的代码drive.google.com/file/d/1em5WDygYf1st914EZgcbL_buQ4bPkYjn/…@Mr.ForExample
    【解决方案2】:

    您应该使用tf.squeeze 而不是reshape。 Tensorflow 专门制作了一个函数来删除指定的维度,因此我认为最好使用这个函数。

    img = image.load_img('rgb_seven.jpeg',
                         color_mode='grayscale',
                         target_size=(img_width, img_height))
    img_tensor = image.img_to_array(img)
    
    img_tensor = tf.squeeze(img_tensor, axis=-1)
    

    【讨论】:

    • 虽然我同意squeezereshape,尤其是在这种情况下,我认为这个答案应该是对@Mr. 的评论。例如答案。
    • 谢谢,但我想知道为什么我的模型有 99% 的准确率,我的 8 位图像预测为 3 pasteboard.co/JKdyUF4.png@Lescurel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2017-07-26
    • 1970-01-01
    • 2021-12-29
    • 2013-08-21
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多