For a reinforcement-learing I create two List<INDArray>
with states and the corresponing move predicton and reward value. How can I transform this two List
s into one org.nd4j.linalg.dataset.api.DataSet
Asked
Active
Viewed 177 times
1

Ackdari
- 3,222
- 1
- 16
- 33
1 Answers
0
Most methods accept org.nd4j.linalg.dataset.api.iterator.DataSetIterator as well, not only org.nd4j.linalg.dataset.DataSet. So you could use this code for it:
import java.util.ArrayList;
import java.util.List;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.dataset.api.DataSetPreProcessor;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
public class DataSetIteratorImpl implements DataSetIterator {
private static final long serialVersionUID = -3010080072504907088L;
private List<DataSet> entries;
private int current = 0;
private DataSetPreProcessor dataSetPreProcessor;
public DataSetIteratorImpl() {
entries = new ArrayList<DataSet>();
reset();
}
public void addEntry(DataSet entry) {
entries.add(entry);
}
@Override
public boolean hasNext() {
return current < entries.size();
}
@Override
public DataSet next() {
return entries.get(current++);
}
@Override
public boolean asyncSupported() {
return false;
}
@Override
public int batch() {
return entries.size();
}
@Override
public DataSetPreProcessor getPreProcessor() {
return dataSetPreProcessor;
}
@Override
public void reset() {
current = 0;
}
@Override
public boolean resetSupported() {
return true;
}
@Override
public void setPreProcessor(DataSetPreProcessor _dataSetPreProcessor) {
dataSetPreProcessor = _dataSetPreProcessor;
}
@Override
public int inputColumns() {
throw new UnsupportedOperationException();
}
@Override
public DataSet next(int arg0) {
throw new UnsupportedOperationException();
}
@Override
public List<String> getLabels() {
throw new UnsupportedOperationException();
}
@Override
public int totalOutcomes() {
throw new UnsupportedOperationException();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
You could create the iterator with this code:
DataSetIterator iterator = new DataSetIteratorImpl ();
And then when you fill the iterator, just call several times:
iterator.addEntry(new DataSet(INDArrayinput, INDArrayoutput));
After that the iterator is ready to be used as a training set.

Krasimir Topchiyski
- 23
- 1
- 4