2017-09-12 1 views
0

J'essaye de construire une application sur spark en utilisant la bibliothèque Deeplearning4j. J'ai un cluster où je vais lancer mon pot (construit en utilisant intelliJ) en utilisant la commande spark-submit. Voici mon codeException dans le fil "principal" java.lang.NoClassDefFoundError: org/deeplearning4j/nn/conf/layers/Couche

package Com.Spark.Examples 

import scala.collection.mutable.ListBuffer 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.canova.api.records.reader.RecordReader 
import org.canova.api.records.reader.impl.CSVRecordReader 
import org.deeplearning4j.nn.api.OptimizationAlgorithm 
import org.deeplearning4j.nn.conf.MultiLayerConfiguration 
import org.deeplearning4j.nn.conf.NeuralNetConfiguration 
import org.deeplearning4j.nn.conf.layers.DenseLayer 
import org.deeplearning4j.nn.conf.layers.OutputLayer 
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork 
import org.deeplearning4j.nn.weights.WeightInit 
import org.deeplearning4j.spark.impl.multilayer.SparkDl4jMultiLayer 
import org.nd4j.linalg.lossfunctions.LossFunctions 

object FeedForwardNetworkWithSpark { 
    def main(args:Array[String]): Unit ={ 
    val recordReader:RecordReader = new CSVRecordReader(0,",") 
    val conf = new SparkConf() 
     .setAppName("FeedForwardNetwork-Iris") 
    val sc = new SparkContext(conf) 
    val numInputs:Int = 4 
    val outputNum = 3 
    val iterations =1 
    val multiLayerConfig:MultiLayerConfiguration = new NeuralNetConfiguration.Builder() 
     .seed(12345) 
     .iterations(iterations) 
     .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) 
     .learningRate(1e-1) 
     .l1(0.01).regularization(true).l2(1e-3) 
     .list(3) 
     .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(3).activation("tanh").weightInit(WeightInit.XAVIER).build()) 
     .layer(1, new DenseLayer.Builder().nIn(3).nOut(2).activation("tanh").weightInit(WeightInit.XAVIER).build()) 
     .layer(2, new OutputLayer.Builder(LossFunctions.LossFunction.MCXENT).weightInit(WeightInit.XAVIER) 
     .activation("softmax") 
     .nIn(2).nOut(outputNum).build()) 
     .backprop(true).pretrain(false) 
     .build 
    val network:MultiLayerNetwork = new MultiLayerNetwork(multiLayerConfig) 
    network.init 
    network.setUpdater(null) 
    val sparkNetwork:SparkDl4jMultiLayer = new 
     SparkDl4jMultiLayer(sc,network) 
    val nEpochs:Int = 6 
    val listBuffer = new ListBuffer[Array[Float]]() 
    (0 until nEpochs).foreach{i => val net:MultiLayerNetwork = sparkNetwork.fit("/user/iris.txt",4,recordReader) 
     listBuffer +=(net.params.data.asFloat().clone()) 
     } 
    println("Parameters vs. iteration Output: ") 
    (0 until listBuffer.size).foreach{i => 
     println(i+"\t"+listBuffer(i).mkString)} 
    } 
} 

Voici mon fichier build.sbt

name := "HWApp" 

version := "0.1" 

scalaVersion := "2.12.3" 

libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.0" % "provided" 
libraryDependencies += "org.apache.spark" % "spark-mllib_2.10" % "1.6.0" % "provided" 
libraryDependencies += "org.deeplearning4j" % "deeplearning4j-nlp" % "0.4-rc3.8" 
libraryDependencies += "org.deeplearning4j" % "dl4j-spark" % "0.4-rc3.8" 
libraryDependencies += "org.deeplearning4j" % "deeplearning4j-core" % "0.4-rc3.8" 
libraryDependencies += "org.nd4j" % "nd4j-x86" % "0.4-rc3.8" % "test" 
libraryDependencies += "org.nd4j" % "nd4j-api" % "0.4-rc3.8" 
libraryDependencies += "org.nd4j" % "nd4j-jcublas-7.0" % "0.4-rc3.8" 
libraryDependencies += "org.nd4j" % "canova-api" % "0.0.0.14" 

quand je vois mon code dans IntelliJ, il ne montre aucune erreur, mais quand j'exécute l'application sur le cluster: i a quelque chose comme ceci:

Error

Je ne sais pas ce qu'il veut de moi. Même un peu d'aide sera appréciée. Merci.

Répondre

0

Je ne sais pas comment vous êtes venu avec cette liste de versions (je suppose que la compilation au hasard? S'il vous plaît ne pas le faire.)

Vous utilisez une ancienne version 1.5 ans de dl4j avec des dépendances qui sont plus anciennes que celles qui n'existent plus.

Commencez à partir de zéro et suivez nos premiers pas et des exemples comme vous le feriez pour tout autre projet open source.

Ceux-ci peuvent être trouvés ici: https://deeplearning4j.org/quickstart

par exemple des projets ici: https://github.com/deeplearnin4j/dl4j-examples

A quelques choses: Canova n'existe plus et a été renommé datavec depuis plus d'un an.

Toutes les versions dl4j, datavec, nd4j, .. doivent être identiques.

Si vous utilisez un de nos modules scala comme spark, ceux-ci doivent toujours avoir la même version scala. Donc vous mélangez scala 2.12 avec les dépendances scala 2.10 qui est une scala non non (ce n'est même pas spécifique à dl4j). Dl4j prend uniquement en charge Scala 2.11 au maximum. C'est principalement parce que les distributions hadoop comme cdh et hortonworks ne supportent pas encore scala 2.12. Editer: Une autre chose à surveiller est que dl4j est spécifique à la façon dont nous produisons des versions étincelles. Spark 1 et 2 sont supportés. Votre identifiant d'artefact doit être:

dl4j étincelle _ $ {version yourscala} (en général 2.10, 2.11) avec une dépendance comme: 0.9.1_spark _ $ {VOTRE VERSION DE SPARK}

Ceci est valable pour notre Modules PNL aussi.

Modifier pour plus de gens qui n'ont pas suivi notre début (S'il vous plaît faites-le, nous gardons cela à jour): Vous avez également toujours besoin d'un backend nd4j. Habituellement c'est nd4j-native-platform mais peut-être cuda si vous utilisez gpus avec: nd4j-cuda - $ {VOTRE VERSION CUDA} -plateforme

+0

Merci pour la réponse rapide et laconique. Permettez-moi de réajuster mon fichier built.sbt. –

+0

J'ai besoin d'une faveur.Ce sont mes versions actuelles de scala et d'étincelles que je prévois d'utiliser. scalaVersion: = "2.11.11" libraryDependencies + = "org.apache.spark"% "spark-core_2.11"% "1.6.0"% "fourni" libraryDependencies + = "org.apache.spark"% "spark-mllib_2.11"% "1.6.0"% "fourni" Pourriez-vous me dire quelles versions dl4j et nd4j sont compatibles avec les versions de scala et d'étincelles ci-dessus? –

+0

Veuillez suivre nos exemples qui montrent tout de bout en bout. L'identifiant du groupe, l'identifiant de l'artefact et la version sont tous alignés avec sbt. –