Следуя задачам из книги Реализуйте 10 реальных приложений глубокого обучения с помощью Deeplearning4j - PullRequest
0 голосов
/ 06 августа 2020

Я слежу за проблемами из книги Реализовать 10 реальных приложений глубокого обучения с использованием Deeplearning4j от Rezaul Karim . У меня есть опыт машинного обучения, но я изучаю библиотеку DL4J. Что касается второй проблемы, проблемы рака, есть фрагмент кода, который сводит меня с ума, потому что он вызывает ошибку ТОЛЬКО, когда код применяется к определенному столбцу c. Вот код:

        Dataset<Row> trainingDF2 = trainingDF1.drop("PassengerId", "Name", "Ticket","Cabin");

        // Convert not numeric columns to numeric form
        StringIndexer sexIndexer = new StringIndexer()
                .setInputCol("Sex")
                .setOutputCol("sexIndex")
                .setHandleInvalid("skip"); //skip columns having nulls

        StringIndexer embarkedIndexer = new StringIndexer()
                .setInputCol("Embarked")
                .setOutputCol("embarkedIndex")
                .setHandleInvalid("skip"); //skip columns having nulls

        Dataset<Row> trainingDF21 = sexIndexer.fit(trainingDF2).transform(trainingDF2).drop("Sex");
        Dataset<Row> trainingDF3 = 
               embarkedIndexer.fit(trainingDF21).transform(trainingDF21).drop("Embarked");

        //        Pipeline pipeline = new Pipeline().setStages(new PipelineStage[] {sexIndexer, 
                  embarkedIndexer});
        //        Dataset<Row> trainingDF3 = pipeline.fit(trainingDF2).transform(trainingDF2).drop("Sex", 
        "Embarked");


        trainingDF1.show();
        trainingDF3.show();

Если вы посмотрите пример в книге, автор действительно использует Pipline для обработки обоих столбцов, но у меня возникло исключение, поэтому я решил «разделить» столбцы, чтобы посмотреть, что продолжается и прокомментировал исходный код. Я оставил его здесь как ссылку.

Как видите, есть два StringIndexer, и сразу после этого они используются для создания новых DataSet. SexIndexer, который обрабатывает столбец "Sex" исходного набора данных, работает нормально. Другой, embarkedIndexer, тот, который обрабатывает столбец "Embarked" исходного набора данных, сводит меня с ума, вызывая исключение InvocationTargetException Exception. Независимо от того, что я пытаюсь изменить порядок обработки столбцов, обрабатывать только один столбец ... Кажется, ничто не позволяет избежать исключения. Я могу только попробовать еще одну вещь: изменить имя столбца ... Я не пробовал, потому что это глупо. Но на данный момент, похоже, что это проблема «глупого решения».

Надеюсь, я достаточно ясен, чтобы кто-то мог пролить свет на эту проблему. Спасибо.

Я добился некоторого прогресса, изменив «нулевые» значения в столбце проблемы c «Выполнен» на что-то «не нулевое» и решил проблему с исключением. Но все же есть проблема с .setHandleInvalid("skip"); в индексаторе, который должен позаботиться о "нулевых" значениях, пропуская их, я полагаю ...

Я добавляю в этот пост полный Исключение

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:63)
Caused by: java.lang.NullPointerException
    at org.apache.spark.sql.types.Metadata$.org$apache$spark$sql$types$Metadata$$hash(Metadata.scala:219)
    at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$2.apply(Metadata.scala:207)
    at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$2.apply(Metadata.scala:207)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:35)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.apache.spark.sql.types.Metadata$.org$apache$spark$sql$types$Metadata$$hash(Metadata.scala:207)
    at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$1.apply(Metadata.scala:204)
    at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$1.apply(Metadata.scala:204)
    at scala.collection.MapLike$MappedValues$$anonfun$foreach$3.apply(MapLike.scala:245)
    at scala.collection.MapLike$MappedValues$$anonfun$foreach$3.apply(MapLike.scala:245)
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
    at scala.collection.immutable.Map$Map3.foreach(Map.scala:161)
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
    at scala.collection.MapLike$MappedValues.foreach(MapLike.scala:245)
    at scala.util.hashing.MurmurHash3.unorderedHash(MurmurHash3.scala:91)
    at scala.util.hashing.MurmurHash3$.mapHash(MurmurHash3.scala:222)
    at scala.collection.GenMapLike$class.hashCode(GenMapLike.scala:35)
    at scala.collection.AbstractMap.hashCode(Map.scala:59)
    at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
    at org.apache.spark.sql.types.Metadata$.org$apache$spark$sql$types$Metadata$$hash(Metadata.scala:204)
    at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$1.apply(Metadata.scala:204)
    at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$1.apply(Metadata.scala:204)
    at scala.collection.MapLike$MappedValues$$anonfun$foreach$3.apply(MapLike.scala:245)
    at scala.collection.MapLike$MappedValues$$anonfun$foreach$3.apply(MapLike.scala:245)
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
    at scala.collection.immutable.Map$Map1.foreach(Map.scala:116)
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
    at scala.collection.MapLike$MappedValues.foreach(MapLike.scala:245)
    at scala.util.hashing.MurmurHash3.unorderedHash(MurmurHash3.scala:91)
    at scala.util.hashing.MurmurHash3$.mapHash(MurmurHash3.scala:222)
    at scala.collection.GenMapLike$class.hashCode(GenMapLike.scala:35)
    at scala.collection.AbstractMap.hashCode(Map.scala:59)
    at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
    at org.apache.spark.sql.types.Metadata$.org$apache$spark$sql$types$Metadata$$hash(Metadata.scala:204)
    at org.apache.spark.sql.types.Metadata._hashCode$lzycompute(Metadata.scala:107)
    at org.apache.spark.sql.types.Metadata._hashCode(Metadata.scala:107)
    at org.apache.spark.sql.types.Metadata.hashCode(Metadata.scala:108)
    at org.apache.spark.sql.catalyst.expressions.AttributeReference.hashCode(namedExpressions.scala:249)
    at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
    at scala.collection.immutable.HashSet.elemHashCode(HashSet.scala:177)
    at scala.collection.immutable.HashSet.computeHash(HashSet.scala:186)
    at scala.collection.immutable.HashSet.$plus(HashSet.scala:84)
    at scala.collection.immutable.HashSet.$plus(HashSet.scala:35)
    at scala.collection.mutable.SetBuilder.$plus$eq(SetBuilder.scala:22)
    at scala.collection.mutable.SetBuilder.$plus$eq(SetBuilder.scala:20)
    at scala.collection.generic.Growable$class.loop$1(Growable.scala:53)
    at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:57)
    at scala.collection.mutable.SetBuilder.$plus$plus$eq(SetBuilder.scala:20)
    at scala.collection.TraversableLike$class.to(TraversableLike.scala:590)
    at scala.collection.AbstractTraversable.to(Traversable.scala:104)
    at scala.collection.TraversableOnce$class.toSet(TraversableOnce.scala:304)
    at scala.collection.AbstractTraversable.toSet(Traversable.scala:104)
    at org.apache.spark.sql.catalyst.trees.TreeNode.containsChild$lzycompute(TreeNode.scala:89)
    at org.apache.spark.sql.catalyst.trees.TreeNode.containsChild(TreeNode.scala:89)
    at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5$$anonfun$apply$11.apply(TreeNode.scala:359)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.immutable.List.map(List.scala:285)
    at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:358)
    at org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:188)
    at org.apache.spark.sql.catalyst.trees.TreeNode.transformChildren(TreeNode.scala:329)
    at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:295)
    at org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpressionDown$1(QueryPlan.scala:248)
    at org.apache.spark.sql.catalyst.plans.QueryPlan.org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$1(QueryPlan.scala:258)
    at org.apache.spark.sql.catalyst.plans.QueryPlan$$anonfun$6.apply(QueryPlan.scala:267)
    at org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:188)
    at org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpressionsDown(QueryPlan.scala:267)
    at org.apache.spark.sql.catalyst.plans.QueryPlan.transformExpressions(QueryPlan.scala:236)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveDeserializer$$anonfun$apply$32.applyOrElse(Analyzer.scala:2027)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveDeserializer$$anonfun$apply$32.applyOrElse(Analyzer.scala:2023)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators$1.apply(LogicalPlan.scala:61)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolveOperators$1.apply(LogicalPlan.scala:61)
    at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolveOperators(LogicalPlan.scala:60)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveDeserializer$.apply(Analyzer.scala:2023)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveDeserializer$.apply(Analyzer.scala:2022)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:85)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:82)
    at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:124)
    at scala.collection.immutable.List.foldLeft(List.scala:84)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:82)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:74)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:74)
    at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.resolveAndBind(ExpressionEncoder.scala:258)
    at org.apache.spark.sql.Dataset.<init>(Dataset.scala:209)
    at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64)
    at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$withPlan(Dataset.scala:2822)
    at org.apache.spark.sql.Dataset.select(Dataset.scala:1121)
    at org.apache.spark.ml.feature.StringIndexerModel.transform(StringIndexer.scala:185)
    at Test.run(Test.java:63)
    at Main.main(Main.java:6)
    ... 5 more
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...