2016-05-29 7 views
0

wekaの訓練を受けたモデルファイルを読み込んで予測を生成しようとしています。しかし、これをしようとすると、java.io.eofexceptionのエラーが発生します。私はこれが私のモデルファイルが正しく形成されていないことに関係していると確信しています。しかし私はwekaツールを使ってモデルファイルを作成し、何が間違っているのか理解していません。wekaの訓練されたモデルファイルを読むときにjava.io.EOFExceptionが発生する

コード

public Classifier loadModel() throws Exception { 
    this.readConfFile(); 
    Classifier classifier; 
    FileInputStream fis = new FileInputStream(
      prop.getProperty("Output_Model_Dir") + "/best3.model"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 

    Log.write.info("Load Classifier Successfully => " 
      + prop.getProperty("Output_Model_Dir") + "/best3.model"); 
    classifier = (Classifier) weka.core.SerializationHelper.read(ois); 
    Log.write.info("1"); 
    ois.close(); 
    Log.write.fine("Read Classifier Successfully"); 
    return classifier; 
} 

ログイン

INFO: Load Classifier Successfully => C:/Users/CRY$TAL/workspace/flysafews/system_files/best.model 
java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794) 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) 
    at weka.core.SerializationHelper.read(SerializationHelper.java:285) 
    at flysafe.predict.support.FileHandler.loadModel(FileHandler.java:104) 
    at flysafe.predict.core.PredictionManager.predict(PredictionManager.java:189) 
    at flysafe.webservice.WebServiceHandler.predictQuery(WebServiceHandler.java:62) 

PS:私はこれに別のモデルファイルを使用していました。そのファイルを使用すると、コードはarff構造のエラーを除いて機能します。

+0

@weroの49キロバイト:

したがって、単にあなたのFileInputStream fisSerializationHelper.readに渡します。動作するものは36kbだけです – CraZyDroiD

+0

問題は、ObjectInputStreamは4バイトだけからなるストリームヘッダーを読み取ることさえできないことです。アクセスの問題? 'fis.read()'を4回実行するとどうなりますか? EOFに達したことを意味する-1も返されますか? – wero

+0

申し訳ありませんが、私にはいくぶん不明です。ここで問題と思われるものは何ですか? – CraZyDroiD

答えて

0

あなただけInputStreamとされ、別のObjectInputStreamObjectInputStreamが、その後失敗するというラップを期待weka.core.SerializationHelper.readからObjectInputStreamを渡します。

FileInputStream fis = new FileInputStream(...);    
classifier = (Classifier) weka.core.SerializationHelper.read(fis); 
+0

次に、私はこのエラーが発生します。 java.io.StreamCorruptedException:無効なストリームヘッダー:ED000573 – CraZyDroiD

+0

@CraZyDroiD独自の 'ObjectInputStream ois = new ObjectInputStream(fis)'をまだ作成していますか? – wero

+0

nope.iがコメントしました。 – CraZyDroiD

関連する問題