减少用于特征生成的预训练深度学习模型的大小

2024-01-02

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

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

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

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

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

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

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

update

正如答案所建议的,我还将模型中的下一层包括在内:

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

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

update 2:

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


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

  1. Apply a model = AveragePooling2D((8, 8), strides=(8, 8))(model) where model is an InceptionV3您加载的对象(没有顶部)。这是下一步InceptionV3架构 - 人们可能很容易假设 - 这些功能仍然包含大量歧视性线索。
  2. 应用某种降维(例如PCA)对数据样本进行分析并降低所有数据的维数以获得合理的文件大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

减少用于特征生成的预训练深度学习模型的大小 的相关文章

随机推荐