2016-05-18 8 views
2

だから、nlpで分類タスクに取り組むために、deeplearning4jというJava用の無料のディーププレイングライブラリを実装しようとしています。nlpモデルをdeeplearning4jでロードする際の問題

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) 

小さなモデルファイルでうまくいきます。 ご協力いただきありがとうございます。

+0

質問がある場合は、Gitterのコミュニティに自由に参加できます:https://gitter.im/deeplearning4j/deeplearning4j – tremstat

答えて

2

IllegalArgumentExceptionがスローされた場合、Javaのスタックトレースで呼び出しスタックをチェックし、間違った引数を生成したメソッドを見つける必要があります。

Hereは、BaseNDArray.javaクラスであり、エラーが表示されているメソッドや行を参照してください。

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

ので、120メガバイトのファイルのため、スライス> =スライス: このメソッドを参照してください! これが問題をどのように解決したのかを助けて答えることができるかどうかを確認してください。

関連する問題