2016-12-15 28 views
1

我在Deeplearning4j中使用了Doc2Vec算法,在我的Windows 10 PC上运行它时它工作正常,但是当我尝试在Linux机器上运行它时,出现以下错误:无法在Linux中构建ParagraphVectors

java.lang.NoClassDefFoundError: Could not initialize class org.nd4j.linalg.factory.Nd4j 
at org.deeplearning4j.models.embeddings.inmemory.InMemoryLookupTable$Builder.<init>(InMemoryLookupTable.java:581) ~[run.jar:?] 
at org.deeplearning4j.models.sequencevectors.SequenceVectors$Builder.presetTables(SequenceVectors.java:801) ~[run.jar:?] 
at org.deeplearning4j.models.paragraphvectors.ParagraphVectors$Builder.build(ParagraphVectors.java:663) ~[run.jar:?] 

我一对夫妇的Linux机器,而这两者都是运行Xubuntu上的尝试这样做,有须藤权限

这里是我创造的ParagraphVectors代码: InputStream的是=新ByteArrayInputStream的( baos.toByteArray());

LabelAwareSentenceIterator iter; 
    iter = new LabelAwareListSentenceIterator(is, DELIM); 
    iter.setPreProcessor(new SentencePreProcessor() { 
    @Override 
    public String preProcess(String sentence) { 
     return new InputHomogenization(sentence).transform(); 
    } 
    }); 

    TokenizerFactory tokenizerFactory = new DefaultTokenizerFactory(); 
    vec = new ParagraphVectors.Builder().minWordFrequency(minWordFrequency).batchSize(batchSize) 
     .iterations(iterations).layerSize(layerSize).stopWords(stopWords).windowSize(windowSize) 
     .learningRate(learningRate).tokenizerFactory(tokenizerFactory).iterate(iter).build(); 
    vec.fit(); 

这里是我的pom.xml(版本0.7.1所有,但我一直在使用0.4 rc3.9,并得到了同样的错误):

<dependency> 
     <groupId>org.deeplearning4j</groupId> 
     <artifactId>deeplearning4j-ui-model</artifactId> 
     <version>${dl4j.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.deeplearning4j</groupId> 
     <artifactId>deeplearning4j-nlp</artifactId> 
     <version>${dl4j.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.nd4j</groupId> 
     <artifactId>nd4j-native</artifactId> 
     <version>${nd4j.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.datavec/datavec-api --> 
    <dependency> 
     <groupId>org.datavec</groupId> 
     <artifactId>datavec-api</artifactId> 
     <version>${nd4j.version}</version> 
    </dependency> 

回答

1

始终坚持首先是最新版本。你能发布完整的堆栈跟踪吗?这绝对是不是的根本原因。也许尝试使用nd4j-native-platform代替?通常这是一个缺少原生文物的问题。

+0

谢谢,我使用了nd4j-native-platform,现在它运行在Linux上。奇怪的是,我将它作为Apache Storm集群的一部分使用,并且我仍然遇到同样的错误,但它在LocalCluster上与本地平台一起工作,所以现在是Storm问题。 –