【问题标题】:How to reshape an array of shape (150,150,3) to an array of shape (1,8192)如何将形状数组 (150,150,3) 重塑为形状数组 (1,8192)
【发布时间】:2020-08-10 06:36:04
【问题描述】:

我已经训练了一个如下的深度学习模型,它是 VGG16 的分类器基础。

model = tf.keras.models.Sequential([
tf.keras.layers.Dense(256, activation='relu', input_dim=4 * 4 * 512),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(1, activation='sigmoid')

1-我的模型接受形状为 (1,8192) 的张量进行预测。

2-我有 (150,150,3) 形状的测试图像,它们被转换为数组。

3-现在我想要一种方法将我的 (150,150,3) 图像转换为形状为 (1,8192) 的张量。

【问题讨论】:

    标签: python numpy tensorflow deep-learning neural-network


    【解决方案1】:

    输入维度似乎非常随意,不适合任务。如果您非常顽固地继续,您可以简单地将其转换为一维数组并像这样重新采样:

    import numpy as np 
    from scipy import signal
    
    image = np.random.rand(150,150,3)
    image_8192 = signal.resample(image.ravel(), 8192)
    

    ...但这是一个非常糟糕的主意。更智能的是更智能地对图像进行下采样,首先将其转换为灰度然后下采样:

    from skimage.color import rgb2gray
    from skimage.transform import resize
    
    grayscale = rgb2gray(image) 
    grayscale_91pix = resize(image, (91, 91)) # size 8291
    image_8192 = signal.resample(grayscale_91pix.ravel(), 8192)
    

    它仍然不是很好,但比幼稚的方法更好。

    【讨论】:

    • 在这两种情况下都会出现以下错误:AttributeError: 'numpy.ndarray' object has no attribute 'resample'
    • @MohammadIbtehaj 对不起,错字。我打算从 scipy 打电话给resample
    • 感谢伙伴,糟糕的方法有效:-D 但转换为灰度会引发以下错误:AttributeError: 'Image' object has no attribute 'ndim'
    • @MohammadIbtehaj 没有问题,我很高兴它(部分)有效。想知道为什么你会收到AttributeError: 'Image' object has no attribute 'ndim'?在我提供的代码或您自己的图像上?使用我的rgb2gray 应该可以完美运行。
    • 将图像提供给grayscale = rgb2gray(image) 会出错。但是喂一个张量不会。我不明白发生了什么。
    猜你喜欢
    • 2020-11-23
    • 2017-01-02
    • 2020-06-22
    • 1970-01-01
    • 2020-10-15
    • 2019-08-23
    • 2020-02-18
    • 2020-04-14
    • 2020-10-05
    相关资源
    最近更新 更多