数据集迭代器允许将数据轻松加载到神经网络中,并帮助组织批处理、转换和掩码。包含在Eclipse DL4J中的迭代器有助于用户提供的数据,或者自动加载公共的基准数据集如MNIST和IRIS。
对于大多数用例,初始化迭代器和传递一个引用到MultiLayerNetwork
或ComputationGraph 的fit
()方法是开始训练任务所需的全部内容:
MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
// 传入一个 MNIST 数据集迭代器,自动获取数据
DataSetIterator mnistTrain = new MnistDataSetIterator(batchSize, true, rngSeed);
net.fit(mnistTrain);
许多其他方法也接受迭代器来完成任务,例如评估:
// 直接传递给神经网络
DataSetIterator mnistTest = new MnistDataSetIterator(batchSize, false, rngSeed);
net.eval(mnistTest);
//使用一个评估类
Evaluation eval = new Evaluation(10); //创建一个带有10个可能分类的评估对象
while(mnistTest.hasNext()){
DataSet next = mnistTest.next();
INDArray output = model.output(next.getFeatureMatrix()); //得到网络预测
eval.eval(next.getLabels(), output); //检查对真实分类的预测
}
[源码]
CifarDataSetIterator是CIFAR10数据集的迭代器,10个分类,32x32图像 3通道(RGB)还支持用于基于Sergey Zagoruyko示例https://github.com/szagoruyko/cifar.torch 对数据集进行归一化的特殊预处理器。
CifarDataSetIterator
public CifarDataSetIterator(int batchSize, int numExamples)
用创建器返回的batchSize与numExamples加载图片。
next
public DataSet next(int batchSize)
用创建器返回的batchSize、numExamples与version加载图片。
[源码]
EMNIST 数据集迭代器
查看: https://www.nist.gov/itl/iad/image-group/emnist-dataset 和 https://arxiv.org/abs/1702.05373
EmnistDataSetIterator
public EmnistDataSetIterator(Set dataSet, int batch, boolean train) throws IOException
EMNIST 数据集有多个不同的子集。 详见 {- link EmnistDataSetIterator}。
numExamplesTrain
public static int numExamplesTrain(Set dataSet)
基于指定的RNG种子创建具有随机混洗数据的EMNIST迭代器
numExamplesTest
public static int numExamplesTest(Set dataSet)
获取指定子集的测试示例数。
numLabels
public static int numLabels(Set dataSet)
获取指定子集的标签数量
isBalanced
public static boolean isBalanced(Set dataSet)
在训练集中标签是否平衡(即:每个标签的实例数是否相等)?
[源码]
UCI合成控制图时间序列数据集。该数据集可用于六类单变量时间序列的分类:正常,周期性,递增趋势,递减趋势,向上移位,向下移位
详情: https://archive.ics.uci.edu/ml/datasets/Synthetic+Control+Chart+Time+Series
数据: https://archive.ics.uci.edu/ml/machine-learning-databases/synthetic_control-mld/synthetic_control.data
图片: https://archive.ics.uci.edu/ml/machine-learning-databases/synthetic_control-mld/data.jpeg
UciSequenceDataSetIterator
public UciSequenceDataSetIterator(int batchSize)
用指定的小批量创建训练集的迭代器。RNG种子123随机化
[源码]
LFW 迭代器 - 来自非限制环境中的标注人脸
查看 http://vis-www.cs.umass.edu/lfw/
总计13233图片,5749 个分类。
LFWDataSetIterator
public LFWDataSetIterator(int batchSize, int numExamples, int[] imgDim, int numLabels, boolean useSubset,
PathLabelGenerator labelGenerator, boolean train, double splitTrainTest,
ImageTransform imageTransform, Random rng)
创建 LFW 数据特有迭代器
参数 imageTransform 如何转换图片
[源码]
MNIST 数据集迭代器 - 60000 个训练样本,10000个测试样本, 10 个分类。数字有 28x28 像素与一个通道 (灰度)。
更多详情查看 http://yann.lecun.com/exdb/mnist/
[源码]
IrisDataSetIterator: 一个众所周知的Iris数据集的迭代器。4个特征,3个标签类
https://archive.ics.uci.edu/ml/datasets/Iris
IrisDataSetIterator
public IrisDataSetIterator()
next
public DataSet next()
IrisDataSetIterator 处理遍历Iris数据集。
see https://archive.ics.uci.edu/ml/datasets/Iris
[源码]
Tiny ImageNet是ImageNet数据库的子集。TinyImageNet是斯坦福大学CS321N的默认课程挑战。
Tiny ImageNet有200个分类,每个分类由500个训练图像组成。
图像是64×64像素,RGB。
查看: http://cs231n.stanford.edu/ 和 https://tiny-imagenet.herokuapp.com/
TinyImageNetDataSetIterator
public TinyImageNetDataSetIterator(int batchSize)
用随机迭代顺序(RNG种子固定到123)创建训练集的迭代器
[源码]
序列记录读取器数据集迭代器。
给定一个记录读取器(和可选的另一个用于标签的记录读取器)生成时间序列(序列)数据集。
支持一对多和多对一类型数据加载的填充(即,具有不同数量的输入vs)。
SequenceRecordReaderDataSetIterator
public SequenceRecordReaderDataSetIterator(SequenceRecordReader featuresReader, SequenceRecordReader labels,
int miniBatchSize, int numPossibleLabels)
构造函数,其中特征和标签来自不同的RecordReader(例如,不同的文件),标签用于分类。
hasNext
public boolean hasNext()
是否有下一条数据。
loadFromMetaData
public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException
使用所提供的RecordMetaData将单个序列示例加载到数据集。请注意,一次加载多个实例更为有效率。使用 {- link #loadFromMetaData(List)}
loadFromMetaData
public DataSet loadFromMetaData(List list) throws IOException
使用所提供的RecordMetaData实例加载多个序列示例到数据集。
[源码]
思想:从一个或多个序列/记录读取器产生多个输入和多个输出。输入和输出可以从RecordReader和SequenceRecordReaders列的子集获得(例如,一些输入和输出作为相同记录/序列中的不同列);还可以混合不同类型的数据(例如,在同一个RecordReaderMultiDataSetIterator使用RecordReader和SequenceRecordReaders)。
输入和子集。
RecordReaderMultiDataSetIterator
public RecordReaderMultiDataSetIterator build()
当处理不同长度的时间序列数据时,我们应该如何对齐输入/标签时间序列?对于等长度:使用EQUAL_LENGTH进行序列分类:使用ALIGN_END
loadFromMetaData
public MultiDataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException
使用所提供的RecordMetaData将单个序列示例加载到数据集。请注意,一次加载多个实例更为有效率。使用 {- link #loadFromMetaData(List)}
loadFromMetaData
public MultiDataSet loadFromMetaData(List list) throws IOException
使用所提供的RecordMetaData实例加载多个序列示例到数据集。
[源码]
DataSet对象以及从各个记录生成小批量。
示例 1: 图像分类, 批量大小32, 10 个分类
rr.initialize(new FileSplit(new File("/path/to/directory")));
DataSetIterator iter = new RecordReaderDataSetIterator.Builder(rr, 32)
//Label index (first arg): Always value 1 when using ImageRecordReader. For CSV etc: use index of the column
// that contains the label (should contain an integer value, 0 to nClasses-1 inclusive). Column indexes start
// at 0. Number of classes (second arg): 标签分类的数量(即10 个用于 MNIST - 10 个用于数字)
.classification(1, nClasses)
.preProcessor(new ImagePreProcessingScaler()) //用于把图片值从0-255归一化到0-1
.build()
}
示例 2: 来自CSV的多输出回归, 批量大小 128
rr.initialize(new FileSplit(new File("/path/to/myCsv.txt")));
DataSetIterator iter = new RecordReaderDataSetIterator.Builder(rr, 128)
//指定回归 标签/目标出现的列。注意所有其它列都被当作特征。列索引从0开始。
.regression(labelColFrom, labelColTo)
.build()
}
RecordReaderDataSetIterator
public RecordReaderDataSetIterator(RecordReader recordReader, int batchSize)
分类构造器:
(a) 标签索引被假定为最后一个可写/列,并且
(b) 从 RecordReader.getLabels()中推断类的数目
注意,如果RecordReader.getLabels()返回NULL,则不会产生输出标签。
setCollectMetaData
public RecordReaderDataSetIterator(RecordReader recordReader, int batchSize, int labelIndex,int numPossibleLabels)
分类的主要构造器。这将将输入类索引(在位置labelIndex中,整数值0到numPossibleLabels-1包含)转换为适当的one-hot输出/标签表示。
loadFromMetaData
public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException
使用提供的RealDataMeta将单个示例加载到DataSet。请注意,同时加载多个实例更为有效。使用 {- link #loadFromMetaData(List)}
loadFromMetaData
public DataSet loadFromMetaData(List list) throws IOException
使用提供的RealDataMeta实例将多个示例加载到数据集。
writableConverter
public Builder writableConverter(WritableConverter converter)
RecordReaderDataSetIterator 的构建类
maxNumBatches
public Builder maxNumBatches(int maxNumBatches)
可选参数,通常不使用。如果设置,则可以用来限制将返回的小批量的最大值(在重置之间)。如果没有设置,将总是返回尽可能多的小批量,因为有可用的数据。
regression
public Builder regression(int labelIndex)
将其用于单输出回归(即,1输出/回归目标)
regression
public Builder regression(int labelIndexFrom, int labelIndexTo)
将其用于多个输出回归(1个或更多的输出/回归目标)。请注意,所有回归目标必须是连续的(即,位置x到y,没有间隙)。
classification
public Builder classification(int labelIndex, int numClasses)
这个用于分类
preProcessor
public Builder preProcessor(DataSetPreProcessor preProcessor)
可选的参数。允许设置预处理器
collectMetaData
public Builder collectMetaData(boolean collectMetaData)
当设置为true时:当前示例的元数据将出现在返回的数据集中。默认情况下禁用。
[源码]
这个迭代器分离/迁移来自支持DataSetIterator的数据集,从而提供“安全”数据集。
这通常用于调试和测试目的,一般不应该由用户使用。
WorkspacesShieldDataSetIterator
public WorkspacesShieldDataSetIterator(@NonNull DataSetIterator iterator)
[源码]
ExistingDataSetIterator
public ExistingDataSetIterator(@NonNull Iterator iterator)
注意,在使用此构造函数时,不支持重置。
next
public DataSet next(int num)
注意,在使用此构造函数时,不支持重置。
[源码]
组合构建器中按指定的顺序应用的各种多数据集预处理器。
CombinedMultiDataSetPreProcessor
public Builder addPreProcessor(@NonNull MultiDataSetPreProcessor preProcessor)
[源码]
用于将数据集加载到内存中的低级接口。
这是由DataSetIterator程序用来处理内存中加载数据的细节。
[源码]
用于DataSetIterator实现的异步预获取迭代器包装器。这将异步地从基础迭代器中预获取指定数量的小批量。
还可以选择(默认情况下对大多数构造函数启用)使用循环工作间,以避免创建具有堆外内存的INDArrays,这些内存需要由JVM垃圾收集器清理。
注意,适当的DL4J fit方法会自动使用这个迭代器,因此用户在拟合网络时不需要手动包装迭代器。
AsyncDataSetIterator
public AsyncDataSetIterator(DataSetIterator baseIterator)
创建一个默认队列大小为8的异步迭代器
next
public DataSet next(int num)
创建一个默认队列大小为8的异步迭代器
inputColumns
public int inputColumns()
数据集的输入列
totalOutcomes
public int totalOutcomes()
数据集的标签数量
resetSupported
public boolean resetSupported()
这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。
asyncSupported
public boolean asyncSupported()
这个DataSetIterator是否支持异步预取多个DataSet对象?大多数DataSetIterator都可以,但是在某些情况下,将此迭代器包装到执行异步预取的迭代器中可能没有意义。例如,对于以下类型的迭代器使用异步预取是没有意义的:(a)已经将它们的全部内容存储在内存中的迭代器(b)重复使用特性/标签数组的迭代器(因为将来的next()调用将覆盖过去的内容)(c)已经实现某种级别的异步预取的迭代器(d)返回不同的数据的迭代器,取决于何时调用next()方法。
reset
public void reset()
将迭代器重置为开始。
shutdown
public void shutdown()
我们希望确保,后台线程将具有相同的线程->设备类似,作为主线程。
batch
public int batch()
批量大小
setPreProcessor
public void setPreProcessor(DataSetPreProcessor preProcessor)
设置预处理器
getPreProcessor
public DataSetPreProcessor getPreProcessor()
返回预处理器,如果定义
hasNext
public boolean hasNext()
如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。
next
public DataSet next()
返回迭代中的下一个元素。
remove
public void remove()
从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。
[源码]
与文件列表一起工作的简单的迭代器。文件到DataSet转换将通过提供的FileCallback实现来处理。
FileSplitDataSetIterator
public FileSplitDataSetIterator(@NonNull List files, @NonNull FileCallback callback)
[源码]
此包装器使用现有的MultiDataSetIterator实现,并防止异步预取。
next
public MultiDataSet next(int num)
获取下“Num”个示例。类似于next方法,但返回指定数量的示例。
setPreProcessor
public void setPreProcessor(MultiDataSetPreProcessor preProcessor)
在每个MultiDataSet返回之前,将预处理器设置到每个MultiDataSet。
resetSupported
public boolean resetSupported()
这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。
asyncSupported
public boolean asyncSupported()
这个DataSetIterator是否支持异步预取多个DataSet对象?
请注意:这个迭代器总是返回false
reset
public void reset()
将迭代器重置为开始状态。
hasNext
public boolean hasNext()
如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。
next
public MultiDataSet next()
在迭代中返回下一个元素
remove
public void remove()
从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。
[源码]
这个迭代器实际上将给定的MultiDataSetIterator分割成训练和测试部分。也就是说,你有100000个例子。你的批量大小是32。这意味着你有3125个总批次。分割比例为0.7,这将给你2187个训练批次,和938个测试批次。
请注意:你不能一行中使用测试迭代器两次。训练迭代器应该在测试迭代器使用之前被使用。
请注意:如果底层迭代器使用epoch间的随机化/洗牌,则不能使用此迭代器。
DataSetIteratorSplitter
public DataSetIteratorSplitter(@NonNull DataSetIterator baseIterator, long totalBatches, double ratio)
惟一的构造器
getTrainIterator
public DataSetIterator getTrainIterator()
此方法返回训练迭代器实例。
next
public DataSet next(int i)
此方法返回测试迭代器实例。
[源码]
按要求获取指定批次大小。
通常用于Spark训练,但可用于其他地方。注意:这里不支持重置方法。
[源码]
建立一个迭代器,一旦小批量.next()返回的数量等于指定的数目这个迭代器即会终止。
注意,对.next(num)的调用被计数为返回小批量的调用,而不管num的值如何。这实际上将数据限制为这个小批量的指定数量。
EarlyTerminationMultiDataSetIterator
public EarlyTerminationMultiDataSetIterator(MultiDataSetIterator underlyingIterator, int terminationPoint)
构造函数采用迭代器进行包装,然后对hasNext()调用后返回false时的小批量。
[源码]
对的第一个值是特征向量,对的第二个值是标签。支持仅生成2D特征/标签
DoublesDataSetIterator
public DoublesDataSetIterator(@NonNull Iterable> iterable, int batchSize)
[源码]
用于在数据集上进行多次传递的数据集迭代器
使用 MultiLayerNetwork/ComputationGraph.fit(DataSetIterator, int numEpochs) 代替
next
public DataSet next(int num)
类似于标准的next方法,但允许返回一个可定制数量的示例。
inputColumns
public int inputColumns()
数据集的输入列
totalOutcomes
public int totalOutcomes()
数据集的标签数量
reset
public void reset()
将迭代器重置为开始。
batch
public int batch()
批量大小
hasNext
public boolean hasNext()
如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。
remove
public void remove()
从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。
[source]
对的第一个值是特征向量,对的第二个值是标签。
INDArrayDataSetIterator
public INDArrayDataSetIterator(@NonNull Iterable> iterable, int batchSize)
[源码]
建立一个迭代器,一旦小批量.next()返回的数量等于指定的数目这个迭代器即会终止。
注意,对.next(num)的调用被计数为返回小批量的调用,而不管num的值如何。这实际上将数据限制为这个小批量的指定数量。
EarlyTerminationDataSetIterator
public EarlyTerminationDataSetIterator(DataSetIterator underlyingIterator, int terminationPoint)
构造函数采用迭代器进行包装,然后对hasNext()调用后返回false时的小批量。
[源码]
包装数据集迭代器,设置第一个(特征矩阵)为标签。
next
public DataSet next(int num)
类似于标准的next方法,但允许返回一个可定制数量的示例。
inputColumns
public int inputColumns()
数据集的输入列
totalOutcomes
public int totalOutcomes()
数据集的标签数量
reset
public void reset()
重置迭代器到开始状态
batch
public int batch()
批量大小
hasNext
public boolean hasNext()
如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。
next
public DataSet next()
返回迭代中的下一个元素
remove
public void remove()
从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。
[源码]
这个数据集迭代器将多个DataSetIterators组合为1个MultiDataSetIterator。来自每个迭代器的值以每个示例为基础进行连接——即,来自每个数据集的值被组合为用于多输入神经网络的不同特征数组。标签只能来自底层DataSetIteartor之一(如果outcome是>=0)或来自所有迭代器(如果outcome是<0)
JointMultiDataSetIterator
public JointMultiDataSetIterator(DataSetIterator... iterators)
next
public MultiDataSet next(int num)
类似于标准的next方法,但允许返回一个可定制数量的示例。
setPreProcessor
public void setPreProcessor(MultiDataSetPreProcessor preProcessor)
在每个MultiDataSet返回之前,将预处理器设置到每个MultiDataSet。
getPreProcessor
public MultiDataSetPreProcessor getPreProcessor()
如果先前设置了MultiDataSetPreProcessor,则获取MultiDataSetPreProcessor。如果未设置预处理器,则返回NULL
resetSupported
public boolean resetSupported()
这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。
asyncSupported
public boolean asyncSupported()
这个MultiDataSetIterator是否支持异步预取多个MultiDataSet对象?大多数MultiDataSetIterators都可以,但是在某些情况下,将此迭代器包装到执行异步预取的迭代器中可能没有意义。例如,对于以下类型的迭代器使用异步预取是没有意义的:(a)已经将它们的全部内容存储在内存中的迭代器(b)重复使用特性/标签数组的迭代器(因为将来的next()调用将覆盖过去的内容)(c)已经实现某种级别的异步预取的迭代器(d)返回不同的数据的迭代器,取决于何时调用next()方法。
reset
public void reset()
将迭代器重置为开始。
hasNext
public boolean hasNext()
如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。
next
public MultiDataSet next()
返回迭代中的下一个元素
remove
public void remove()
请注意:此方法未实现。
[源码]
用于从DataSet中采样的包装器。这将从给定的数据集随机采样。
SamplingDataSetIterator
public SamplingDataSetIterator(DataSet sampleFrom, int batchSize, int totalNumberSamples)
[源码]
RandomMultiDataSetIterator:根据某些分布生成随机值(或零值、整数、整数等)。
注意:这通常用于测试、调试和基准测试的目的。
RandomMultiDataSetIterator
public RandomMultiDataSetIterator(int numMiniBatches, @NonNull List> features, @NonNull List> labels)
addFeatures
public Builder addFeatures(long[] shape, Values values)
addFeatures
public Builder addFeatures(long[] shape, char order, Values values)
添加一个新的特征数组到迭代器
addLabels
public Builder addLabels(long[] shape, Values values)
添加一个新的标签数组到迭代器
addLabels
public Builder addLabels(long[] shape, char order, Values values)
添加一个新的标签数组到迭代器
generate
public static INDArray generate(long[] shape, Values values)
生成具有指定形状的随机数组
generate
public static INDArray generate(long[] shape, char order, Values values)
生成具有指定形状和顺序的随机数组
[源码]
这个类是简单的包装器,它采用单输入MultiDataSet并将它们转换为DataSet。
请注意:只有当特征/标签/掩码数量为1时才有效。
MultiDataSetWrapperIterator
public MultiDataSetWrapperIterator(MultiDataSetIterator iterator)
[源码]
此包装器使用你现有的DataSetIterator实现并防止异步预取。这主要用于调试目的;通常情况下迭代器对异步预取是不安全的。
AsyncShieldDataSetIterator
public AsyncShieldDataSetIterator(@NonNull DataSetIterator iterator)
next
public DataSet next(int num)
类似于标准的next方法,但允许返回一个可定制数量的示例。
inputColumns
public int inputColumns()
数据集的输入列
totalOutcomes
public int totalOutcomes()
数据集的标签数量
resetSupported
public boolean resetSupported()
这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。
asyncSupported
public boolean asyncSupported()
这个DataSetIterator是否支持异步预取多个DataSet对象?
请注意:这个迭代器总是返回false
reset
public void reset()
将迭代器重置为开始状态。
batch
public int batch()
批量大小
setPreProcessor
public void setPreProcessor(DataSetPreProcessor preProcessor)
设置一个预处理器
getPreProcessor
public DataSetPreProcessor getPreProcessor()
如果已定义,返回一个预处理器。
hasNext
public boolean hasNext()
获取数据集迭代记录读取器标签
next
public DataSet next()
返回迭代中下一个元素
remove
public void remove()
从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。
[源码]
要求获取指定批次大小。
通常用于Spark训练,但可用于其他地方。
注意:这里不支持重置方法。
[源码]
对的第一个值是特征向量,对的第二个值是标签。仅支持生成2D特征/标签
FloatsDataSetIterator
public FloatsDataSetIterator(@NonNull Iterable> iterable, int batchSize)
[源码]
这是一个特殊的预处理器,它允许组合多个预处理器,并按它们顺序应用到数据中。
CombinedPreProcessor
public CombinedPreProcessor build()
按顺序预处理数据集
[源码]
RandomDataSetIterator:根据某些分布生成随机值(或零值、整数、整数等)。
注意:这通常用于测试、调试和基准测试的目的。
RandomDataSetIterator
public RandomDataSetIterator(int numMiniBatches, long[] featuresShape, long[] labelsShape, Values featureValues, Values labelValues)
[源码]
基线实现,包括对数据获取器和元数据的一些基本getters的控制。
[源码]
这是一个特殊的虚拟预处理器,它什么也不做。
preProcess
public void preProcess(DataSet toPreProcess)
预处理数据集
[源码]
这个迭代器实际上将给定的多数据报器分割成训练和测试部分。也就是说,你有100000个例子。你的批量是32。这意味着你有3125个总批次。分割比例0.7,这将给你2187个训练批次,和938个测试批次。
请注意:你不能在一行中使用测试迭代器两次。在测试迭代器使用之前使用训练迭代器。
请注意:如果底层迭代器在epoch之间使用随机化/洗牌,则不能使用此迭代器。
MultiDataSetIteratorSplitter
public MultiDataSetIteratorSplitter(@NonNull MultiDataSetIterator baseIterator, long totalBatches, double ratio)
getTrainIterator
public MultiDataSetIterator getTrainIterator()
此方法返回训练迭代器实例。
next
public MultiDataSet next(int num)
类似于标准的next方法,但允许返回一个可定制数量的示例。
[源码]
用于MultiDataSetIterator实现的异步预获取迭代器包装器。这将异步地从基础迭代器中预获取指定数量的小批量。
还可以选择(默认情况下对大多数构造函数启用)使用循环工作间,以避免创建具有堆外内存的INDArrays,这些内存需要由JVM垃圾收集器清理。
注意,适当的DL4J fit方法会自动使用这个迭代器,因此用户在拟合网络时不需要手动包装迭代器。
next
public MultiDataSet next(int num)
类似于标准的next方法,但允许返回一个可定制数量的示例。
setPreProcessor
public void setPreProcessor(MultiDataSetPreProcessor preProcessor)
在每个MultiDataSet返回之前,将预处理器设置到每个MultiDataSet。
resetSupported
public boolean resetSupported()
这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。
asyncSupported
public boolean asyncSupported()
这个DataSetIterator是否支持异步预取多个DataSet对象?大多数DataSetIterator都可以,但是在某些情况下,将此迭代器包装到执行异步预取的迭代器中可能没有意义。例如,对于以下类型的迭代器使用异步预取是没有意义的:(a)已经将它们的全部内容存储在内存中的迭代器(b)重复使用特性/标签数组的迭代器(因为将来的next()调用将覆盖过去的内容)(c)已经实现某种级别的异步预取的迭代器(d)返回不同的数据的迭代器,取决于何时调用next()方法。
reset
public void reset()
将迭代器重置为开始。
shutdown
public void shutdown()
我们希望确保,后台线程将具有相同的线程->设备类似,作为主线程。
hasNext
public boolean hasNext()
如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。
next
public MultiDataSet next()
在迭代中返回下一个元素
remove
public void remove()
从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。
[源码]
将DataSetIterator适配到MultiDataSetIterator