【发布时间】: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