【问题标题】:How to store Lists of INDArray in a DataSet如何在数据集中存储 INDArray 的列表
【发布时间】:2019-05-27 16:11:49
【问题描述】:

对于强化学习,我创建了两个带有状态的List<INDArray>,以及相应的移动预测和奖励值。如何将这两个Lists 转换为一个org.nd4j.linalg.dataset.api.DataSet

【问题讨论】:

    标签: java deeplearning4j nd4j


    【解决方案1】:

    大多数方法也接受 org.nd4j.linalg.dataset.api.iterator.DataSetIterator,而不仅仅是 org.nd4j.linalg.dataset.DataSet。所以你可以使用这个代码:

    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();
        }
    }
    

    您可以使用以下代码创建迭代器:

    DataSetIterator iterator = new DataSetIteratorImpl ();
    

    然后当你填充迭代器时,只需调用几次:

    iterator.addEntry(new DataSet(INDArrayinput, INDArrayoutput));
    

    之后,迭代器就可以用作训练集了。

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 1970-01-01
      • 2011-03-05
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多