spo*_*234 5 numpy machine-learning neural-network deep-learning keras
我在Keras中使用预训练模型来生成一组图像的特征:
model = InceptionV3(weights='imagenet', include_top=False)
train_data = model.predict(data).reshape(data.shape[0],-1)
Run Code Online (Sandbox Code Playgroud)
但是,我有很多图像,Imagenet模型为每个图像输出131072个特征(列).
有了200k的图像,我会得到一个(200000, 131072)太大而无法放入内存的数组.
更重要的是,我需要将此数组保存到磁盘,当保存为.npy或时,它将占用100 GB的空间.h5py
我可以通过只提供1000个像这样的批量图像并将它们保存到磁盘来避免内存问题,但不能解决磁盘空间问题.
如何在不丢失太多信息的情况下缩小模型?
更新
正如答案所示,我还在模型中包含了下一层:
base_model = InceptionV3(weights='imagenet')
model = Model(input=base_model.input, output=base_model.get_layer('avg_pool').output)
Run Code Online (Sandbox Code Playgroud)
这减少了输出 (200000, 2048)
更新2:
另一个有趣的解决方案可能是bcolz减少numpy数组大小的软件包 https://github.com/Blosc/bcolz
我看到至少有两种解决方案可以解决您的问题:
model = AveragePooling2D((8, 8), strides=(8, 8))(model)wheremodel是InceptionV3您加载的对象(没有顶部)。这是架构的下一步InceptionV3- 所以人们很容易假设 - 这些功能仍然包含大量歧视性线索。PCA)并降低所有数据的维度以获得合理的文件大小。| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |