gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:29:17 28 4
gpt4 key购买 nike

我正在 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:

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

最佳答案

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

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

关于numpy - 减少用于特征生成的预训练深度学习模型的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42573986/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com