【问题标题】:How to run model.predict() on a 5 dimensional array in Keras?如何在 Keras 的 5 维数组上运行 model.predict()?
【发布时间】:2021-05-29 23:03:38
【问题描述】:

我已经训练了一个二进制分类模型,该模型采用 (128x128x3) 图像,然后给出 0 或 1 的二进制值。然后我想拍摄更大的图像,例如 (nxmx3),并应用窗口函数并具有模型在每个窗口上运行预测。

我使用 skimage.util.view_as_windows 将 (1024x1024x3) 图像转换为 (897,897,128,128,3) numpy 数组。我现在想通过我的模型运行每个 (i, j, 128,128,3) 窗口,然后将其放置在同一位置。最后,我想要一个 (897,897) 数组,其中包含该类存在的概率。

我现在这样做的方式需要一个 for 循环,它需要将近 1-2 分钟才能通过,同时随着包含模型预测的列表变大而变慢。

有没有办法对这个过程进行矢量化?也许展平 numpy 数组,在其上运行 model.predict(),然后创建一个具有相同先前尺寸的二维数组?

【问题讨论】:

    标签: python numpy tensorflow keras scikit-image


    【解决方案1】:

    您可以使用完全卷积网络,它使用滑动窗口来预测输出,它不依赖于输入形状。用具有相同 output_shape 的卷积层替换您的全连接层,并在 (128x128x3) 数据集上进行训练。

    如果您在 1024x1024 输入图像上进行预测,网络会为每个 128x128 区域预测一个标签。

    【讨论】:

    • 是否可以使用预训练的网络来做到这一点?也许将其作为输入 -> 带有模型的自定义 CNN 层 -> 输出?
    • 当然。请记住,您应该删除所有完全连接的层,否则您将收到不同输入形状的错误
    • 啊,我明白你的意思是什么错误了。你会碰巧知道我在哪里可以找到你所说的例子吗?如果可能的话,我真的很想避免重新训练我的模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2018-02-05
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多