【问题标题】:Convert Keras model output into sparse matrix without forloop将 Keras 模型输出转换为稀疏矩阵,无需 for 循环
【发布时间】:2019-09-20 21:14:04
【问题描述】:

我有一个预训练的 keras 模型,其输出的维度为 [n, 4000](它对 4000 个类进行分类)。

我需要对测试数据(300K 观察)进行预测。

但是当我调用方法model.predict(X_train) 时,我得到一个run-out memory error,因为我没有足够的RAM 来存储形状为(300K , 4000) 的矩阵。

因此,将模型输出转换为稀疏矩阵是合乎逻辑的。

但是将predict method 包装成scipy 函数sparse.csr_matrix 不起作用(sparse.csr_matrix(model.predict(X_train))),因为它首先在RAM 中分配空间用于预测,然后才转换为稀疏矩阵。

我还可以对特定批次的测试数据进行预测,然后使用forloop进行转换。 但在我看来,这不是最佳且非常耗费资源的方式。

请给我建议,有没有其他方法可以将模型输出转换为稀疏矩阵?

【问题讨论】:

  • 批量调用保存的模型是司空见惯的——我可能是错的,但不禁觉得您正在尝试解决一个充其量不需要解决方案,最坏的情况是无法解决的问题解决不了。当然,即使您将模型更改为输出稀疏矩阵(或任何其他更节省内存的表示形式),它仍然需要倒数第二层中的内存?
  • 我认为有内置的KerasTensoflow 方法可以将模型输出转换为稀疏矩阵。
  • 当然——但所有能实现的只是在最后添加一个具有内存效率表示的新层。在转换之前,预测仍然需要为大层使用内存
  • 我认为问题在于存储带有预测的巨大Numpy array,而不是存储模型层的权重。

标签: python tensorflow machine-learning keras


【解决方案1】:

predict()中不是有batch_size参数吗?

如果我猜对了,n 表示样本数对吗?

假设您的系统内存足以容纳整个数据,但 VRAM 却不是。

【讨论】:

    猜你喜欢
    • 2018-05-10
    • 2021-12-07
    • 2017-08-30
    • 2023-04-10
    • 2021-11-25
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多