首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩小预训练深度学习模型的特征生成规模

缩小预训练深度学习模型的特征生成规模
EN

Stack Overflow用户
提问于 2017-03-03 08:29:15
回答 1查看 1.3K关注 0票数 5

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

代码语言:javascript
复制
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张图像并将它们保存到磁盘上来解决内存问题,而不是磁盘空间问题。

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

更新

正如答案所示,我还在模型中包括了下一层:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 10:54:55

我认为至少有两种方法可以解决你的问题:

  1. 应用model = AveragePooling2D((8, 8), strides=(8, 8))(model),其中model是您加载的InceptionV3对象(没有顶部)。这是InceptionV3体系结构的下一步--因此人们可以很容易地假设--这些特性仍然保留着大量的歧视性线索。
  2. 对数据样本应用某种降维方法(如PCA),并降低所有数据的维数,以获得合理的文件大小。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42573986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档