Python 无需forloop将Keras模型输出转换为稀疏矩阵
我有一个预训练的Python 无需forloop将Keras模型输出转换为稀疏矩阵,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我有一个预训练的keras模型,其输出维度为[n,4000](它对4000个类进行分类) 我需要对测试数据(300K观测值)进行预测 但当我调用methodmodel.predict(X_train)时,我得到了一个内存不足错误,因为我没有足够的RAM来存储形状为(300K,4000)的矩阵 因此,将模型输出转换为稀疏矩阵是合乎逻辑的 但是将预测方法包装成scipy函数sparse.csr_矩阵不起作用(sparse.csr_矩阵(model.predict(X_train))),因为它首先在R
keras
模型,其输出维度为[n,4000]
(它对4000个类进行分类)
我需要对测试数据(300K观测值)进行预测
但当我调用methodmodel.predict(X_train)
时,我得到了一个内存不足错误
,因为我没有足够的RAM来存储形状为(300K,4000)
的矩阵
因此,将模型输出转换为稀疏矩阵是合乎逻辑的
但是将预测方法
包装成scipy
函数sparse.csr_矩阵
不起作用(sparse.csr_矩阵(model.predict(X_train))
),因为它首先在RAM中为预测分配空间,然后才转换成稀疏矩阵
我还可以对特定批次的测试数据进行预测,然后使用forloop
对其进行转换。
但在我看来,这并不是最佳的、非常消耗资源的方式
请给我一些建议,有没有其他方法可以将模型输出转换为稀疏矩阵?在
predict()中没有batch\u size
参数
如果我得到正确的n
表示样本数量,对吗
假设您的系统ram足以容纳整个数据,但VRAM却不能。批量调用保存的模型是司空见惯的事——我可能会错,但忍不住觉得您试图解决的问题充其量不需要解决方案,充其量也无法解决。当然,即使您将模型更改为输出稀疏矩阵(或任何其他更节省内存的表示形式)它仍然需要倒数第二层的内存?我认为有内置的Keras
或Tensoflow
方法可以将模型输出转换为稀疏矩阵。当然-但所能实现的就是在最后添加一个新层,并使用内存高效的表示。在转换之前,预测仍然需要使用大型层的内存。我认为问题在于存储带有预测的大型Numpy数组,而不是存储模型层的权重。