【问题标题】:weka serialized model file too bigweka 序列化模型文件太大
【发布时间】:2017-10-25 21:44:28
【问题描述】:

我已经使用 weka(在 java 中)构建了一个随机森林分类器。 我将一个序列化的分类器保存到磁盘。但是,序列化文件太大(大约 100 MB)。此外,如果我训练更多实例,文件会越来越大,所以我猜序列化模型也会保存数据。 还有另一种方法可以保存 weka 分类器吗?并且输出文件更小(通常我认为大小应该只取决于模型架构)。 我使用以下进行序列化,都产生相同的文件大小: Weka.core.serializationHelper.write()、Debug.saveToFile()、ObjectOutputStream.writeObject()

【问题讨论】:

    标签: serialization weka random-forest


    【解决方案1】:

    您可以将其保存为 GZIP。通常它更紧凑。

                File f = new File(path);
                FileOutputStream fileOutputStream = new FileOutputStream(f);
                GZIPOutputStream gzipOutputStream = new GZIPOutputStream(fileOutputStream);
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(gzipOutputStream);
                objectOutputStream.writeObject(yourClassifier);
                objectOutputStream.flush();
                objectOutputStream.close();
                gzipOutputStream.close();
                fileOutputStream.close();
    

    要加载它,您可以使用:

                File f = new File(path);
                FileInputStream fileInputStream = new FileInputStream(f);
                GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream);
                ObjectInputStream objectOutputStream = new ObjectInputStream(gzipInputStream);
                Classifier mlClassifier = (Classifier) objectOutputStream.readObject();
                objectOutputStream.close();
                gzipInputStream.close();
                fileInputStream.close();
    

    【讨论】:

    • 它将它从 73 mb 减少到只有 13 mb - 所以它起作用了。但是,模型本身仍然占用大量内存(导致 java heap error)。有什么方法可以从 weka 分类器中删除样本?
    • 您可以训练更紧凑的模型。您目前使用的是什么分类器?
    • 随机森林。我不认为大尺寸与模型容量(树的数量等)有关。这不应该取决于火车的大小。
    • 实例数影响树的深度。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多