【问题标题】:reduce size of pretrained deep learning model for feature generation减少用于特征生成的预训练深度学习模型的大小
【发布时间】:2017-07-23 06:35:36
【问题描述】:

我在 Keras 中使用预训练模型为一组图像生成特征:

model = InceptionV3(weights='imagenet', include_top=False)
train_data = model.predict(data).reshape(data.shape[0],-1)

但是,我有很多图像,Imagenet 模型为每张图像输出 131072 个特征(列)。

如果有 200k 图像,我会得到一个 (200000, 131072) 数组,它太大而无法放入内存。

更重要的是,我需要将此数组保存到磁盘,保存为 .npy.h5py 时需要 100 GB 空间

我可以通过只输入大约 1000 张图像的批次并将它们保存到磁盘来规避内存问题,但不能解决磁盘空间问题。

如何在不丢失太多信息的情况下使模型更小?

更新

正如答案所建议的,我也在模型中包含下一层:

base_model = InceptionV3(weights='imagenet')
model = Model(input=base_model.input, output=base_model.get_layer('avg_pool').output)

这将输出减少到(200000, 2048)

更新 2

另一个有趣的解决方案可能是 bcolz 包以减少 numpy 数组的大小 https://github.com/Blosc/bcolz

【问题讨论】:

    标签: numpy machine-learning neural-network deep-learning keras


    【解决方案1】:

    我看到您的问题至少有两种解决方案:

    1. 应用model = AveragePooling2D((8, 8), strides=(8, 8))(model),其中model 是您加载的InceptionV3 对象(没有顶部)。这是InceptionV3 架构的下一步——因此人们很容易假设——这些特征仍然包含大量歧视性线索。
    2. 对数据样本应用某种降维(例如PCA)并降低所有数据的维数以获得合理的文件大小。

    【讨论】:

    • 1.实际上是一个非常简单的解决方案,它带来了很好的减少。 2.不可行,我已经试过了。为第一批 1000 张图像计算 PCA 并随后用相同的值转换其他图像批次也是没有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2020-10-27
    • 1970-01-01
    • 2020-11-10
    • 2019-12-30
    • 2021-05-05
    • 2020-03-24
    相关资源
    最近更新 更多