Хранение идентификатора автомобиля при обнаружении аномалий
Я протестировал обнаружение аномалий с помощью 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();
```
Завершите пример ниже:
Если вы используете эти вещи, вы настраиваете сохранить данные как есть, но имеете полный конвейер данных. Есть много способов сделать это, только имейте в виду, что вы начинаете с идентификатора транспортного средства, он не должен исчезать.