Ich bin jetzt schon zwei Stunden am Rätselraten und komme nicht weiter. Vorweg: Meine Locale ist nicht auf en_us eingestellt.
Ich hab eine einfache CSV-Datei mit 500 Zeilen und jeweils 5 double-Werten, und zwar so:
1.0;2.1;3.000000;4.56;5.0
usw.
Das ;
ist also das Trennzeichen und "\n"
oder "\r\n"
die neue Zeile.
Ausschnitt Code:
CSVNLinesSequenceRecordReader reader = new CSVNLinesSequenceRecordReader(5, 0, ";");
reader.initialize(new NumberedFileInputSplit("C:\\...\\Data\\" + name + "_%d.csv", 0, 499));
SequenceRecordReaderDataSetIterator iterator = new SequenceRecordReaderDataSetIterator(reader, batchSize, numLabelClasses, 1);
Importe:
import org.datavec.api.conf.Configuration;
import org.datavec.api.records.reader.impl.csv.CSVNLinesSequenceRecordReader;
import org.datavec.api.records.reader.impl.csv.CSVSequenceRecordReader;
import org.datavec.api.split.FileSplit;
import org.datavec.api.split.NumberedFileInputSplit;
import org.deeplearning4j.datasets.datavec.SequenceRecordReaderDataSetIterator;
//...
Fehlermeldung:
Exception in thread "ADSI prefetch thread" java.lang.RuntimeException: java.lang.NumberFormatException: For input string: "39829.78;39859.86;39682.6;39754.42;794.958726"
at org.nd4j.linalg.dataset.AsyncDataSetIterator$AsyncPrefetchThread.run(AsyncDataSetIterator.java:437)
Caused by: java.lang.NumberFormatException: For input string: "39829.78;39859.86;39682.6;39754.42;794.958726"
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:549)
at org.datavec.api.writable.Text.toDouble(Text.java:595)
at org.deeplearning4j.datasets.datavec.RecordReaderMultiDataSetIterator.convertWritablesSequence(RecordReaderMultiDataSetIterator.java:710)
at org.deeplearning4j.datasets.datavec.RecordReaderMultiDataSetIterator.convertFeaturesOrLabels(RecordReaderMultiDataSetIterator.java:369)
at org.deeplearning4j.datasets.datavec.RecordReaderMultiDataSetIterator.nextMultiDataSet(RecordReaderMultiDataSetIterator.java:327)
at org.deeplearning4j.datasets.datavec.RecordReaderMultiDataSetIterator.next(RecordReaderMultiDataSetIterator.java:213)
at org.deeplearning4j.datasets.datavec.SequenceRecordReaderDataSetIterator.next(SequenceRecordReaderDataSetIterator.java:365)
at org.deeplearning4j.datasets.datavec.SequenceRecordReaderDataSetIterator.next(SequenceRecordReaderDataSetIterator.java:344)
at org.deeplearning4j.datasets.datavec.SequenceRecordReaderDataSetIterator.next(SequenceRecordReaderDataSetIterator.java:48)
at org.nd4j.linalg.dataset.AsyncDataSetIterator$AsyncPrefetchThread.run(AsyncDataSetIterator.java:411)
Doku:
https://deeplearning4j.org/api/latest/org/datavec/api/records/reader/impl/csv/package-summary.html
Ausschnitt aus der Doku:
A CSV Sequence record reader where:
(a) all time series are in a single file
(b) each time series is of the same length (specified in constructor)
© no delimiter is used between time series
For example, with nLinesPerSequence=10, lines 0 to 9 are the first time series, 10 to 19 are the second, and so on.
Siehe auch:
https://deeplearning4j.konduit.ai/getting-started/tutorials/recurrent-networks#iterating-from-disk
(Abschnitt „Iterating from disk“)
Sieht jemand vielleicht auf Anhieb, wie man die Daten da am einfachsten hereinbekommen kann?