Хранение идентификатора автомобиля при обнаружении аномалий

Я протестировал обнаружение аномалий с помощью Deeplearning4j, все работает отлично, за исключением того, что я не могу сохранить VehicleID во время тренировки. Каков наилучший подход в таком сценарии?

Пожалуйста, посмотрите на следующий фрагмент кода, SparkTransformExecutor возвращает RDD, а InMemorySequence получает список, когда, я собираю список из индексации RDD, не гарантируется.

  val records:JavaRDD[util.List[util.List[Writable]]] = SparkTransformExecutor
  .executeToSequence(.....)
   val split = records.randomSplit(Array[Double](0.7,0.3))
  val testSequences = split(1)

 //in memory  sequence reader
  val testRR = new InMemorySequenceRecordReader(testSequences.collect().toList)

   val testIter = new RecordReaderMultiDataSetIterator.Builder(batchSize)
           .addSequenceReader("records", trainRR)
           .addInput("records")
          .build()

1 ответ

Обычно вы отслеживаете примеры обучения по индексу в наборе данных. Отследите, какой индекс этого набора данных является транспортным средством, находится в наборе данных вместе с обучением. Есть несколько способов сделать это.

В dl4j мы обычно сохраняем данные необработанными и используем программы чтения + преобразования процессов для данных обучения. Если вы используете программу чтения записей для необработанных данных (выберите одну для вашего набора данных, это может быть CSV или даже видео) и используйте набор данных для чтения, как здесь: ```java RecordReader recordReader = new CSVRecordReader (0, ','); recordReader.initialize (new FileSplit (new ClassPathResource ("iris.txt"). getFile ())); int labelIndex = 4; int numClasses = 3; int batchSize = 150;

    RecordReaderDataSetIterator iterator = new RecordReaderDataSetIterator(recordReader,batchSize,labelIndex,numClasses);
    iterator.setCollectMetaData(true);  //Instruct the iterator to collect metadata, and store it in the DataSet objects
    DataSet allData = iterator.next();


    DataSet trainingData = testAndTrain.getTrain();
    DataSet testData = testAndTrain.getTest();

```

(Полный код здесь): https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/dataexamples/CSVExampleEvaluationMetaData.java

Наряду с этим вы используете TransformProcess:

```

   //Let's define the schema of the data that we want to import
    //The order in which columns are defined here should match the 
    //order in which they appear in the input data
    Schema inputDataSchema = new Schema.Builder()
        //We can define a single column
        .addColumnString("DateTimeString")

.....build (); // На каждом шаге мы определяем столбец по имени, которое мы им дали в
схема входных данных, выше

TransformProcess tp = new TransformProcess.Builder(inputDataSchema)
//your transforms go here

    .build();

```

Завершите пример ниже:

https://github.com/deeplearning4j/dl4j-examples/blob/6967b2ec2d51b0d19b5d6437763a2936ca922a0a/datavec-examples/src/main/java/org/datavec/transform/basic/BasicDataVecExampleLocal.java

Если вы используете эти вещи, вы настраиваете сохранить данные как есть, но имеете полный конвейер данных. Есть много способов сделать это, только имейте в виду, что вы начинаете с идентификатора транспортного средства, он не должен исчезать.

Другие вопросы по тегам