我在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数组大小的bcolz包https://github.com/Blosc/bcolz。
发布于 2017-03-03 10:54:55
我认为至少有两种方法可以解决你的问题:
model = AveragePooling2D((8, 8), strides=(8, 8))(model),其中model是您加载的InceptionV3对象(没有顶部)。这是InceptionV3体系结构的下一步--因此人们可以很容易地假设--这些特性仍然保留着大量的歧视性线索。PCA),并降低所有数据的维数,以获得合理的文件大小。https://stackoverflow.com/questions/42573986
复制相似问题