我使用Deeplearning4j测试了异常检测,但一切正常,除了,我在训练时无法保留VehicleID。在这种情况下最好的方法是什么?
请看下面的代码片段,SparkTransformExecutor返回一个RDD,而当我从RDD索引中收集列表时,InMemorySequence正在获取一个列表。
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()
答案 0 :(得分:1)
通常,您通过数据集中的索引跟踪训练示例。跟踪训练中数据集中哪个数据集是车辆。有很多方法可以做到这一点。
在dl4j中,我们通常保留原始数据,并使用记录读取器+转换过程来训练数据。如果您在原始数据上使用记录读取器(为数据集选择一个,则可能是csv甚至是视频),并使用如下所示的recordreader数据集迭代器: Java RecordReader recordReader =新的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();
```
除此之外,您还可以使用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")
...
。建立();
//在每一步中,我们通过在
中为其指定的名称来标识列
输入数据模式,上方
TransformProcess tp = new TransformProcess.Builder(inputDataSchema)
//your transforms go here
.build();
```
完整的示例如下:
如果使用这些内容,则可以自定义保留数据,但要具有完整的数据管道。有很多方法可以做到,只需记住您从车辆ID开始,它就不必消失。