2

所以我正在尝试为 Java 实现名为 deeplearning4j 的免费深度学习库,以解决 nlp 中的分类任务。

public static void Learn(String labelledDataFileName) throws Exception {
    ParagraphVectors paragraphVectors = new ParagraphVectors();
    InMemoryLookupCache cache = new InMemoryLookupCache();
    LabelleDataIterator iterator = new LabelleDataIterator(new File(labelledDataFileName));
    TokenizerFactory t = new DefaultTokenizerFactory();
    t.setTokenPreProcessor(new CommonPreprocessor());
    paragraphVectors = new ParagraphVectors.Builder()
            .minWordFrequency(1)
            .iterations(3)
            .learningRate(0.025)
            .minLearningRate(0.001)
            .layerSize(400)
            .batchSize(1000)
            .epochs(1)
            .iterate(iterator)
            .trainWordVectors(true)
            .vocabCache(cache)
            .tokenizerFactory(t)
            .build();
    paragraphVectors.fit();
    WordVectorSerializer.writeFullModel(paragraphVectors, MODEL_FILE_NAME);
}

相当标准,与网上提供的样本没有太大区别。然后使用 writeFullModel 方法将拟合后的训练模型保存到文本文件中。然后就可以用这个方法加载了

WordVectorSerializer.loadFullModel(MODEL_FILE_NAME);

问题是,当模型变大时,它似乎不起作用。对于大小为 120Mb 的模型文件,我不断得到这个

Exception in thread "main" java.lang.IllegalArgumentException: Illegal slice 7151
at org.nd4j.linalg.api.ndarray.BaseNDArray.slice(BaseNDArray.java:2852)
at org.nd4j.linalg.api.ndarray.BaseNDArray.tensorAlongDimension(BaseNDArray.java:753)
at org.nd4j.linalg.api.ndarray.BaseNDArray.vectorAlongDimension(BaseNDArray.java:830)
at org.nd4j.linalg.api.ndarray.BaseNDArray.getRow(BaseNDArray.java:3628)
at org.deeplearning4j.models.embeddings.loader.WordVectorSerializer.loadFullModel(WordVectorSerializer.java:523)

不过,它可以用一个小模型文件很好地加载。任何帮助将不胜感激,非常感谢。

4

1 回答 1

2

当抛出 IllegalArgumentException 时,您必须检查 Java 堆栈跟踪中的调用堆栈并找到产生错误参数的方法。

是 BaseNDArray.java 类,查看行或搜索出现错误的方法!看到这个方法:

public INDArray slice(int slice) {
    int slices = slices();
    if(slice >= slices)
        throw new IllegalArgumentException("Illegal slice " + slice);

所以,对于 120MB 的文件,切片 >= 切片!看看这是否可以帮助并回复您是如何解决问题的!

于 2016-05-29T12:07:03.457 回答