DL4J中文文档/模型/迭代器

什么是迭代器?

数据集迭代器允许将数据轻松加载到神经网络中,并帮助组织批处理、转换和掩码。包含在Eclipse DL4J中的迭代器有助于用户提供的数据,或者自动加载公共的基准数据集如MNIST和IRIS。

用法

对于大多数用例,初始化迭代器和传递一个引用到MultiLayerNetworkComputationGraph 的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数据集迭代器)

[源码]

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加载图片。


EmnistDataSetIterator (EMNIST 数据集迭代器)

[源码]

EMNIST 数据集迭代器

  • COMPLETE: 也称为 “ByClass” 分割。 共计814,255 个示例(训练 + 测试), 62 个分类
  • MERGE:   也称为“ByMerge”分割。共计814255个示例。47个不平衡分类。对于字母C、I、J、K、L、M、O、P、S、U、V、W、X、Y和Z,为每个字母(而不是2个)将小写字母和大写字母(难以区分)组合为一个类
  • BALANCED: 总计 131,600 示例。 47 个分类 (每个分类都有相同数量的例子)
  • LETTERS: 总计145,600 示例。 26 个平衡分类。
  • DIGITS: 总计 280,000 示例。 10 个平衡分类。


查看: 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迭代器

  • 参数 dataSet 用于返回的数据集
  • 参数 batchSize批量大小
  • 参数 train 如果为 true: 使用训练集。 如果 false: 使用测试集
  • 参数 seed Random number generator seed

numExamplesTest

public static int numExamplesTest(Set dataSet) 

获取指定子集的测试示例数。

  • 参数 dataSet 获取的子集
  • 返回指定子集的示例数

numLabels

public static int numLabels(Set dataSet) 

获取指定子集的标签数量

  • 参数 dataSet 要获取的子集
  • 返回指定子集的标签数

isBalanced

public static boolean isBalanced(Set dataSet) 

在训练集中标签是否平衡(即:每个标签的实例数是否相等)?

  • 返回true或false

UciSequenceDataSetIterator (UCI数据库是加州大学欧文分校(University of CaliforniaIrvine)提出的用于机器学习的数据库,这个数据库目前共有335个数据集,其数目还在不断增加,UCI数据集是一个常用的标准测试数据集。)

[源码]

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随机化

  • 参数  batchSize 小批量大小

LFWDataSetIterator (LFW数据集是为了研究 非限制环境下的人脸识别问题而建立。这个集合包含超过13,000张人脸图像(全部来自于internet,而不是实验室环境))

[源码]

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 数据特有迭代器

  • 参数 batchSize 示例的批量大小
  • 参数 numExamples 示例总数
  • 参数 imgDim 高度、宽度和通道的数组
  • 参数 numLabels 示例总数
  • 参数 useSubset 使用LFW数据集的一个子集
  • 参数 labelGenerator 路径标注生成器使用
  • 参数 train 如果使用训练值则为true
  • 参数 splitTrainTest 为将要测试的训练和保留分割数据的百分比
  • 参数 imageTransform 如何转换图片

  • 参数 rng 批量洗牌中的要锁定的随机数

MnistDataSetIterator (手写数字数据集迭代器)

[源码]

MNIST 数据集迭代器 - 60000 个训练样本,10000个测试样本, 10 个分类。数字有 28x28 像素与一个通道 (灰度)。
更多详情查看 http://yann.lecun.com/exdb/mnist/


IrisDataSetIterator (鸢尾花卉数据集迭代器)

[源码]

IrisDataSetIterator: 一个众所周知的Iris数据集的迭代器。4个特征,3个标签类
https://archive.ics.uci.edu/ml/datasets/Iris

IrisDataSetIterator

public IrisDataSetIterator()

next

public DataSet next() 

IrisDataSetIterator 处理遍历Iris数据集。


TinyImageNetDataSetIterator

[源码]

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)创建训练集的迭代器

  • 参数 batchSize 迭代器小批次大小

SequenceRecordReaderDataSetIterator

[源码]

序列记录读取器数据集迭代器。

给定一个记录读取器(和可选的另一个用于标签的记录读取器)生成时间序列(序列)数据集。

支持一对多和多对一类型数据加载的填充(即,具有不同数量的输入vs)。

SequenceRecordReaderDataSetIterator

public SequenceRecordReaderDataSetIterator(SequenceRecordReader featuresReader, SequenceRecordReader labels,
                    int miniBatchSize, int numPossibleLabels) 

构造函数,其中特征和标签来自不同的RecordReader(例如,不同的文件),标签用于分类。

  • 参数 featuresReader 特征SequenceRecordReader
  • 参数 labels 标签: 假设每个时间步的单个值,其中值是0到NoMaulabeleBels-1范围内的整数。
  • 参数 miniBatchSize 每次调用next()的小批次大小
  • 参数 numPossibleLabels  标签的分类数

hasNext

public boolean hasNext() 

 是否有下一条数据。

loadFromMetaData

public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException 

使用所提供的RecordMetaData将单个序列示例加载到数据集。请注意,一次加载多个实例更为有效率。使用 {- link #loadFromMetaData(List)}

  • 参数 recordMetaData 从中加载的记录元数据。应该由给定的记录读取器产生。
  • 使用指定的示例返回DataSet
  • 加载数据时如果发生错误则抛出IOException

loadFromMetaData

public DataSet loadFromMetaData(List<RecordMetaData> list) throws IOException 

使用所提供的RecordMetaData实例加载多个序列示例到数据集。

  • 参数 list从中加载的RecordMetaData实例列表。应该是由提供给SequenceRecordReaderDataSetIterator 构造器的记录读取器产生。
  • 用指定的示例返回DataSet
  • 加载数据时如果发生错误则抛出IOException

RecordReaderMultiDataSetIterator (记录读取器多数据集迭代器)

[源码]

思想:从一个或多个序列/记录读取器产生多个输入和多个输出。输入和输出可以从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)}

  • 参数 recordMetaData 从中加载的记录元数据。应该由给定的记录读取器产生。
  • 使用指定的示例返回DataSet
  • 加载数据时如果发生错误则抛出IOException

loadFromMetaData

public MultiDataSet loadFromMetaData(List<RecordMetaData> list) throws IOException 

使用所提供的RecordMetaData实例加载多个序列示例到数据集。

  • 参数 list从中加载的RecordMetaData实例列表。应该是由提供给SequenceRecordReaderDataSetIterator 构造器的记录读取器产生。
  • 用指定的示例返回DataSet
  • 加载数据时如果发生错误则抛出IOException

RecordReaderDataSetIterator

[源码]

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,则不会产生输出标签。

  • 参数 recordReader 作为数据源的记录读取器
  • 参数 batchSize用于每次 .next() 调用的小批次大小

setCollectMetaData

public RecordReaderDataSetIterator(RecordReader recordReader, int batchSize, int labelIndex,int numPossibleLabels)

分类的主要构造器。这将将输入类索引(在位置labelIndex中,整数值0到numPossibleLabels-1包含)转换为适当的one-hot输出/标签表示。

  • 参数 recordReader 记录读取器: 提供数据源
  • 参数 batchSize 批量大小 (示例数量) 用于输出数据集对象
  • 参数 labelIndex 标签 Writable (通常是一个 IntWritable)的索引, 由recordReader.next()获得
  • 参数 numPossibleLabels 分类的数量(可能的标签)

loadFromMetaData

public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException 

使用提供的RealDataMeta将单个示例加载到DataSet。请注意,同时加载多个实例更为有效。使用 {- link #loadFromMetaData(List)}

  • 参数 recordMetaData 用于加载的 RecordMetaData。应该由给定的记录读取器产生
  • 返回指定示例的 DataSet 
  • 如果加载数据期间发生错误则抛出 IOException

loadFromMetaData

public DataSet loadFromMetaData(List<RecordMetaData> list) throws IOException 

使用提供的RealDataMeta实例将多个示例加载到数据集。

  • 参数 list 是用于加载的RecordMetaData 实例列表。应该是由提供给ReadReadReadDeader的构造函数的记录读取器生成的
  • 返回指定示例的 DataSet 
  • 如果加载数据期间发生错误则抛出 IOException

writableConverter

public Builder writableConverter(WritableConverter converter)

RecordReaderDataSetIterator 的构建类

maxNumBatches

public Builder maxNumBatches(int maxNumBatches)

可选参数,通常不使用。如果设置,则可以用来限制将返回的小批量的最大值(在重置之间)。如果没有设置,将总是返回尽可能多的小批量,因为有可用的数据。

  • 参数 maxNumBatches 每个epoch / 重置的小批量的最大数值

regression

public Builder regression(int labelIndex)

将其用于单输出回归(即,1输出/回归目标)

  • 参数 labelIndex 包含回归目标的列索引(索引从0开始)

regression

public Builder regression(int labelIndexFrom, int labelIndexTo)

将其用于多个输出回归(1个或更多的输出/回归目标)。请注意,所有回归目标必须是连续的(即,位置x到y,没有间隙)。

  • 参数 labelIndexFrom 第一个回归目标的列索引(索引开始于0)
  • 参数 labelIndexTo 最后一个回归目标的列索引(包括)

classification

public Builder classification(int labelIndex, int numClasses)

 这个用于分类

  • 参数 labelIndex 标签索引。列(从0开始索引)是一个整数的值,而且包括0 到 numClasses-1 的值
  • 参数 numClasses 标签类别数量 (即数据集中的类别/类数)

preProcessor

public Builder preProcessor(DataSetPreProcessor preProcessor)

可选的参数。允许设置预处理器

  • 参数 preProcessor 是要使用的预处理器

collectMetaData

public Builder collectMetaData(boolean collectMetaData)

当设置为true时:当前示例的元数据将出现在返回的数据集中。默认情况下禁用。

  • 参数 collectMetaData 是否应该收集元数据

WorkspacesShieldDataSetIterator

[源码]

这个迭代器分离/迁移来自支持DataSetIterator的数据集,从而提供“安全”数据集。

这通常用于调试和测试目的,一般不应该由用户使用。

WorkspacesShieldDataSetIterator

public WorkspacesShieldDataSetIterator(@NonNull DataSetIterator iterator) 
  • 参数 iterator 用于分离值的底层迭代器

ExistingDataSetIterator

[源码]

ExistingDataSetIterator

public ExistingDataSetIterator(@NonNull Iterator<DataSet> iterator) 

注意,在使用此构造函数时,不支持重置。

  • 参数 iterator 用于包装的迭代器

next

public DataSet next(int num) 

注意,在使用此构造函数时,不支持重置。

  • 参数 iterator 用于包装的迭代器
  • 参数 labels 字符串标签。可能为空。

CombinedMultiDataSetPreProcessor

[源码]

组合构建器中按指定的顺序应用的各种多数据集预处理器。

CombinedMultiDataSetPreProcessor

public Builder addPreProcessor(@NonNull MultiDataSetPreProcessor preProcessor)
  • 参数 preProcessor 要添加到要应用的预处理器列表中的预处理器

DataSetFetcher

[源码]

用于将数据集加载到内存中的低级接口。

这是由DataSetIterator程序用来处理内存中加载数据的细节。


AsyncDataSetIterator

[源码]

用于DataSetIterator实现的异步预获取迭代器包装器。这将异步地从基础迭代器中预获取指定数量的小批量。

还可以选择(默认情况下对大多数构造函数启用)使用循环工作间,以避免创建具有堆外内存的INDArrays,这些内存需要由JVM垃圾收集器清理。

注意,适当的DL4J fit方法会自动使用这个迭代器,因此用户在拟合网络时不需要手动包装迭代器。

AsyncDataSetIterator

public AsyncDataSetIterator(DataSetIterator baseIterator) 

创建一个默认队列大小为8的异步迭代器

  • 参数 baseIterator 底层迭代器用于异步方式包装和获取

next

public DataSet next(int num) 

创建一个默认队列大小为8的异步迭代器

  • 参数 baseIterator 底层迭代器用于异步方式包装和获取
  • 参数 queue 队列大小

inputColumns

public int inputColumns() 

数据集的输入列

  • return

totalOutcomes

public int totalOutcomes() 

数据集的标签数量

  • return

resetSupported

public boolean resetSupported() 

这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。

  • 如果支持重置方法,返回true;否则为false

asyncSupported

public boolean asyncSupported() 

这个DataSetIterator是否支持异步预取多个DataSet对象?大多数DataSetIterator都可以,但是在某些情况下,将此迭代器包装到执行异步预取的迭代器中可能没有意义。例如,对于以下类型的迭代器使用异步预取是没有意义的:(a)已经将它们的全部内容存储在内存中的迭代器(b)重复使用特性/标签数组的迭代器(因为将来的next()调用将覆盖过去的内容)(c)已经实现某种级别的异步预取的迭代器(d)返回不同的数据的迭代器,取决于何时调用next()方法。

  • 如果来自此迭代器的异步预取是可用的则返回true;如果异步预取不应用于此迭代器,则返回false

reset

public void reset() 

将迭代器重置为开始。

shutdown

public void shutdown() 

我们希望确保,后台线程将具有相同的线程->设备类似,作为主线程。

batch

public int batch() 

批量大小

  • return

setPreProcessor

public void setPreProcessor(DataSetPreProcessor preProcessor) 

设置预处理器

  • 参数  preProcessor 要设置的预处理器

getPreProcessor

public DataSetPreProcessor getPreProcessor() 

返回预处理器,如果定义

  • return

hasNext

public boolean hasNext() 

如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。

  • 如果迭代器具有更多元素,则返回true

next

public DataSet next() 

返回迭代中的下一个元素。

  • 返回迭代中的下一个元素

remove

public void remove() 

从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已经被调用。
  • implSpec 默认的实现抛出一个UnsupportedOperationException实例然后不执行任何操作。

FileSplitDataSetIterator

[源码]

与文件列表一起工作的简单的迭代器。文件到DataSet转换将通过提供的FileCallback实现来处理。

FileSplitDataSetIterator

public FileSplitDataSetIterator(@NonNull List<File> files, @NonNull FileCallback callback) 
  • 参数 files 用于迭代的文件列表
  • 参数 callback 加载文件的回调

AsyncShieldMultiDataSetIterator

[源码]

此包装器使用现有的MultiDataSetIterator实现,并防止异步预取。

next

public MultiDataSet next(int num) 

获取下“Num”个示例。类似于next方法,但返回指定数量的示例。

  • 参数 num 获取示例数量

setPreProcessor

public void setPreProcessor(MultiDataSetPreProcessor preProcessor) 

在每个MultiDataSet返回之前,将预处理器设置到每个MultiDataSet。

  • 参数 preProcessor MultiDataSet的预处理器,可以为空。

resetSupported

public boolean resetSupported() 

这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。

  • 如果支持重置方法,返回true;否则为false

asyncSupported

public boolean asyncSupported() 

这个DataSetIterator是否支持异步预取多个DataSet对象?

请注意:这个迭代器总是返回false

  • 如果来自此迭代器的异步预取是支持的返回true;如果异步预取不应用于此迭代器,则返回false

reset

public void reset() 

将迭代器重置为开始状态。

hasNext

public boolean hasNext() 

如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。

  • 如果迭代器具有更多元素,则返回true

next

public MultiDataSet next() 

在迭代中返回下一个元素

  • 在迭代中返回下一个元素

remove

public void remove() 

从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已经被调用。
  • implSpec 默认的实现抛出一个UnsupportedOperationException实例然后不执行任何操作。

DataSetIteratorSplitter

[源码]

这个迭代器实际上将给定的MultiDataSetIterator分割成训练和测试部分。也就是说,你有100000个例子。你的批量大小是32。这意味着你有3125个总批次。分割比例为0.7,这将给你2187个训练批次,和938个测试批次。

请注意:你不能一行中使用测试迭代器两次。训练迭代器应该在测试迭代器使用之前被使用。

请注意:如果底层迭代器使用epoch间的随机化/洗牌,则不能使用此迭代器。

DataSetIteratorSplitter

public DataSetIteratorSplitter(@NonNull DataSetIterator baseIterator, long totalBatches, double ratio) 

惟一的构造器

  • 参数 baseIterator - 要被包装和分割的迭代器
  • 参数 totalBatches - 基础迭代器中的总批次
  • 参数 ratio -训练/测试 分割比例

getTrainIterator

public DataSetIterator getTrainIterator() 

此方法返回训练迭代器实例。

  • return

next

public DataSet next(int i) 

此方法返回测试迭代器实例。

  • return

IteratorMultiDataSetIterator

[源码]

按要求获取指定批次大小。

通常用于Spark训练,但可用于其他地方。注意:这里不支持重置方法。


EarlyTerminationMultiDataSetIterator

[源码]

建立一个迭代器,一旦小批量.next()返回的数量等于指定的数目这个迭代器即会终止。

注意,对.next(num)的调用被计数为返回小批量的调用,而不管num的值如何。这实际上将数据限制为这个小批量的指定数量。

EarlyTerminationMultiDataSetIterator

public EarlyTerminationMultiDataSetIterator(MultiDataSetIterator underlyingIterator, int terminationPoint) 

构造函数采用迭代器进行包装,然后对hasNext()调用后返回false时的小批量。

  • 参数 underlyingIterator, 进行包装的迭代器
  • 参数 terminationPoint,  在hasNext()被调用后会返回false时的小批量

DoublesDataSetIterator

[源码]

对的第一个值是特征向量,对的第二个值是标签。支持仅生成2D特征/标签

DoublesDataSetIterator

public DoublesDataSetIterator(@NonNull Iterable<Pair<double[], double[]>> iterable, int batchSize) 
  • 参数 iterable 来自源数据的迭代
  • 参数 batchSize 生成数据集对象的批处理大小

MultipleEpochsIterator

[源码]

用于在数据集上进行多次传递的数据集迭代器

使用 MultiLayerNetwork/ComputationGraph.fit(DataSetIterator, int numEpochs) 代替

next

public DataSet next(int num) 

类似于标准的next方法,但允许返回一个可定制数量的示例。

  • 参数 num 示例数量
  • 返回下一条数据

inputColumns

public int inputColumns() 

数据集的输入列

  • return

totalOutcomes

public int totalOutcomes() 

数据集的标签数量

  • return

reset

public void reset() 

将迭代器重置为开始。

batch

public int batch() 

批量大小

  • return

hasNext

public boolean hasNext() 

如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。

  • 如果迭代器具有更多元素,则返回true

remove

public void remove() 

从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已被调用。

INDArrayDataSetIterator

[source]

对的第一个值是特征向量,对的第二个值是标签。

INDArrayDataSetIterator

public INDArrayDataSetIterator(@NonNull Iterable<Pair<INDArray, INDArray>> iterable, int batchSize) 
  • 参数 iterable 来自源数据的迭代
  • 参数 batchSize 生成数据集对象的批处理大小

EarlyTerminationDataSetIterator

[源码]

建立一个迭代器,一旦小批量.next()返回的数量等于指定的数目这个迭代器即会终止。

注意,对.next(num)的调用被计数为返回小批量的调用,而不管num的值如何。这实际上将数据限制为这个小批量的指定数量。

EarlyTerminationDataSetIterator

public EarlyTerminationDataSetIterator(DataSetIterator underlyingIterator, int terminationPoint) 

构造函数采用迭代器进行包装,然后对hasNext()调用后返回false时的小批量。

  • 参数 underlyingIterator, 进行包装的迭代器
  • 参数 terminationPoint,  在hasNext()被调用后会返回false时的小批量

ReconstructionDataSetIterator

[源码]

包装数据集迭代器,设置第一个(特征矩阵)为标签。

next

public DataSet next(int num) 

类似于标准的next方法,但允许返回一个可定制数量的示例。

  • 参数 num 示例数量
  • 返回下一条数据

inputColumns

public int inputColumns() 

数据集的输入列

  • return

totalOutcomes

public int totalOutcomes() 

数据集的标签数量

  • return

reset

public void reset() 

 重置迭代器到开始状态

batch

public int batch() 

批量大小

  • return

hasNext

public boolean hasNext() 

如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。

  • 如果迭代器具有更多元素,则返回true

next

public DataSet next() 

 返回迭代中的下一个元素

  • 返回迭代中的下一个元素

remove

public void remove() 

从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已被调用。

JointMultiDataSetIterator

[源码]

这个数据集迭代器将多个DataSetIterators组合为1个MultiDataSetIterator。来自每个迭代器的值以每个示例为基础进行连接——即,来自每个数据集的值被组合为用于多输入神经网络的不同特征数组。标签只能来自底层DataSetIteartor之一(如果outcome是>=0)或来自所有迭代器(如果outcome是<0)

JointMultiDataSetIterator

public JointMultiDataSetIterator(DataSetIterator... iterators) 
  • 参数 iterators 包装过的基础迭代器

next

public MultiDataSet next(int num) 

类似于标准的next方法,但允许返回一个可定制数量的示例。

  • 参数 num 示例数量
  • 返回下一条数据

setPreProcessor

public void setPreProcessor(MultiDataSetPreProcessor preProcessor) 

在每个MultiDataSet返回之前,将预处理器设置到每个MultiDataSet。

  • 参数 preProcessor MultiDataSet的预处理器,可以为空。

getPreProcessor

public MultiDataSetPreProcessor getPreProcessor() 

如果先前设置了MultiDataSetPreProcessor,则获取MultiDataSetPreProcessor。如果未设置预处理器,则返回NULL

  • 返回 Preprocessor

resetSupported

public boolean resetSupported() 

这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。

  • 如果支持重置方法,返回true;否则为false 

asyncSupported

public boolean asyncSupported() 

这个MultiDataSetIterator是否支持异步预取多个MultiDataSet对象?大多数MultiDataSetIterators都可以,但是在某些情况下,将此迭代器包装到执行异步预取的迭代器中可能没有意义。例如,对于以下类型的迭代器使用异步预取是没有意义的:(a)已经将它们的全部内容存储在内存中的迭代器(b)重复使用特性/标签数组的迭代器(因为将来的next()调用将覆盖过去的内容)(c)已经实现某种级别的异步预取的迭代器(d)返回不同的数据的迭代器,取决于何时调用next()方法。

  • 如果来自此迭代器的异步预取是可用的则返回true;如果异步预取不应用于此迭代器,则返回false

reset

public void reset() 

将迭代器重置为开始。

hasNext

public boolean hasNext() 

如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。

  • 如果迭代器具有更多元素,则返回true

next

public MultiDataSet next() 

 返回迭代中的下一个元素

  • 返回迭代中的下一个元素

remove

public void remove() 

请注意:此方法未实现。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已经被调用。
  • implSpec 默认的实现抛出一个UnsupportedOperationException实例然后不执行任何操作。

SamplingDataSetIterator (采样数据集迭代器)

[源码]

用于从DataSet中采样的包装器。这将从给定的数据集随机采样。

SamplingDataSetIterator

public SamplingDataSetIterator(DataSet sampleFrom, int batchSize, int totalNumberSamples) 

RandomMultiDataSetIterator

[源码]

RandomMultiDataSetIterator:根据某些分布生成随机值(或零值、整数、整数等)。

注意:这通常用于测试、调试和基准测试的目的。

RandomMultiDataSetIterator

public RandomMultiDataSetIterator(int numMiniBatches, @NonNull List<Triple<long[], Character, Values>> features, @NonNull List<Triple<long[], Character, Values>> labels)
  • 参数 numMiniBatches 每一个epoch小批量的数量
  • 参数 features 列表中的每一个三元组指定特征数组的形状、数组顺序和值类型。
  • 参数 labels 列表中的每一个三元组指定标签数组的形状、数组顺序和值类型。

addFeatures

public Builder addFeatures(long[] shape, Values values) 
  • 参数 numMiniBatches 每一个epoch小批量的数量

addFeatures

public Builder addFeatures(long[] shape, char order, Values values)

添加一个新的特征数组到迭代器

  • 参数 shape特征形状
  • 参数 order 数组的顺序(c或f)
  • 参数 values 填充数组的值

addLabels

public Builder addLabels(long[] shape, Values values) 

添加一个新的标签数组到迭代器

  • 参数 shape标签形状
  • 参数 values 填充数组的值

addLabels

public Builder addLabels(long[] shape, char order, Values values)

添加一个新的标签数组到迭代器

  • 参数 shape标签形状
  • 参数 order 数组的顺序(c或f)
  • 参数 values 填充数组的值

generate

public static INDArray generate(long[] shape, Values values) 

生成具有指定形状的随机数组

  • 参数 shape数组形状
  • 参数 values 填充数组的值
  • 返回指定形状+内容的随机数组

generate

public static INDArray generate(long[] shape, char order, Values values)

生成具有指定形状和顺序的随机数组

  • 参数 shape数组形状
  • 参数 order 数组的顺序(c或f)
  • 参数 values 填充数组的值
  • 返回指定形状+内容的随机数组

MultiDataSetWrapperIterator

[源码]

这个类是简单的包装器,它采用单输入MultiDataSet并将它们转换为DataSet。

请注意:只有当特征/标签/掩码数量为1时才有效。

MultiDataSetWrapperIterator

public MultiDataSetWrapperIterator(MultiDataSetIterator iterator) 
  • 参数 iterator 进行包装的迭代器

AsyncShieldDataSetIterator

[源码]

此包装器使用你现有的DataSetIterator实现并防止异步预取。这主要用于调试目的;通常情况下迭代器对异步预取是不安全的。

AsyncShieldDataSetIterator

public AsyncShieldDataSetIterator(@NonNull DataSetIterator iterator) 
  • 参数 iterator进行包装的迭代器,禁用异步预取

next

public DataSet next(int num) 

类似于标准的next方法,但允许返回一个可定制数量的示例。

  • 参数 num 示例数量
  • 返回下一条数据

inputColumns

public int inputColumns() 

数据集的输入列

  • return

totalOutcomes

public int totalOutcomes() 

数据集的标签数量

  • return

resetSupported

public boolean resetSupported() 

这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。

  • 如果支持重置方法,返回true;否则为false

asyncSupported

public boolean asyncSupported() 

这个DataSetIterator是否支持异步预取多个DataSet对象?

请注意:这个迭代器总是返回false

  • 如果来自此迭代器的异步预取是支持的返回true;如果异步预取不应用于此迭代器,则返回false

reset

public void reset() 

将迭代器重置为开始状态。

batch

public int batch() 

批量大小

  • return

setPreProcessor

public void setPreProcessor(DataSetPreProcessor preProcessor) 

设置一个预处理器

  • 参数 preProcessor 一个用于设置的预处理器

getPreProcessor

public DataSetPreProcessor getPreProcessor() 

如果已定义,返回一个预处理器。

  • return

hasNext

public boolean hasNext() 

获取数据集迭代记录读取器标签

next

public DataSet next() 

返回迭代中下一个元素

  • 返回迭代中下一个元素

remove

public void remove() 

从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已经被调用。
  • implSpec 默认的实现抛出一个UnsupportedOperationException实例然后不执行任何操作。

IteratorDataSetIterator

[源码]

要求获取指定批次大小。

通常用于Spark训练,但可用于其他地方。

注意:这里不支持重置方法。


FloatsDataSetIterator

[源码]

对的第一个值是特征向量,对的第二个值是标签。仅支持生成2D特征/标签

FloatsDataSetIterator

public FloatsDataSetIterator(@NonNull Iterable<Pair<float[], float[]>> iterable, int batchSize) 
  • 参数 iterable 来自源数据的迭代
  • 参数 batchSize 生成数据集对象的批处理大小

CombinedPreProcessor

[源码]

这是一个特殊的预处理器,它允许组合多个预处理器,并按它们顺序应用到数据中。

CombinedPreProcessor

public CombinedPreProcessor build() 

按顺序预处理数据集

  • 参数 toPreProcess 预处理的数据集

RandomDataSetIterator

[源码]

RandomDataSetIterator:根据某些分布生成随机值(或零值、整数、整数等)。

注意:这通常用于测试、调试和基准测试的目的。

RandomDataSetIterator

public RandomDataSetIterator(int numMiniBatches, long[] featuresShape, long[] labelsShape, Values featureValues, Values labelValues)
  • 参数 numMiniBatches 每个epoch的小批量大小
  • 参数 featuresShape  特征形状
  • 参数 labelsShape 标签形状
  • 参数 featureValues 特征值类型
  • 参数 labelValues 检签值类型

BaseDatasetIterator

[源码]

基线实现,包括对数据获取器和元数据的一些基本getters的控制。


DummyPreProcessor

[源码]

这是一个特殊的虚拟预处理器,它什么也不做。

preProcess

public void preProcess(DataSet toPreProcess) 

预处理数据集

  • 参数 toPreProcess 用于预处理的数据集

MultiDataSetIteratorSplitter

[源码]

这个迭代器实际上将给定的多数据报器分割成训练和测试部分。也就是说,你有100000个例子。你的批量是32。这意味着你有3125个总批次。分割比例0.7,这将给你2187个训练批次,和938个测试批次。

请注意:你不能在一行中使用测试迭代器两次。在测试迭代器使用之前使用训练迭代器。

请注意:如果底层迭代器在epoch之间使用随机化/洗牌,则不能使用此迭代器。

MultiDataSetIteratorSplitter

public MultiDataSetIteratorSplitter(@NonNull MultiDataSetIterator baseIterator, long totalBatches, double ratio) 
  • 参数 baseIterator - 要被包装和分割的迭代器
  • 参数 totalBatches - 基础迭代器中的批次总数。此值将用于确定测试/训练批次的数量。
  • 参数 ratio -此值将用作分割器。应介于0>x<1之间。也就是说,如果提供值0.7,那么总示例的70%将用于训练,总示例的30%将用于测试

getTrainIterator

public MultiDataSetIterator getTrainIterator() 

此方法返回训练迭代器实例。

  • return

next

public MultiDataSet next(int num) 

类似于标准的next方法,但允许返回一个可定制数量的示例。

  • 参数 num 示例数量
  • 返回下一条数据

AsyncMultiDataSetIterator

[源码]

用于MultiDataSetIterator实现的异步预获取迭代器包装器。这将异步地从基础迭代器中预获取指定数量的小批量。

还可以选择(默认情况下对大多数构造函数启用)使用循环工作间,以避免创建具有堆外内存的INDArrays,这些内存需要由JVM垃圾收集器清理。

注意,适当的DL4J fit方法会自动使用这个迭代器,因此用户在拟合网络时不需要手动包装迭代器。

next

public MultiDataSet next(int num) 

类似于标准的next方法,但允许返回一个可定制数量的示例。

  • 参数 num 示例数量
  • 返回下一条数据

setPreProcessor

public void setPreProcessor(MultiDataSetPreProcessor preProcessor) 

在每个MultiDataSet返回之前,将预处理器设置到每个MultiDataSet。

  • 参数 preProcessor MultiDataSet的预处理器,可以为空。

resetSupported

public boolean resetSupported() 

这个DataSetIterator支持重置吗?许多DataSetIterator支持重置,但有些不支持。

  • 如果支持重置方法,返回true;否则为false 

asyncSupported

public boolean asyncSupported() 

这个DataSetIterator是否支持异步预取多个DataSet对象?大多数DataSetIterator都可以,但是在某些情况下,将此迭代器包装到执行异步预取的迭代器中可能没有意义。例如,对于以下类型的迭代器使用异步预取是没有意义的:(a)已经将它们的全部内容存储在内存中的迭代器(b)重复使用特性/标签数组的迭代器(因为将来的next()调用将覆盖过去的内容)(c)已经实现某种级别的异步预取的迭代器(d)返回不同的数据的迭代器,取决于何时调用next()方法。

  • 如果来自此迭代器的异步预取是可用的则返回true;如果异步预取不应用于此迭代器,则返回false

reset

public void reset() 

将迭代器重置为开始。

shutdown

public void shutdown() 

我们希望确保,后台线程将具有相同的线程->设备类似,作为主线程。

hasNext

public boolean hasNext() 

如果迭代器具有更多元素,则返回true。(换句话说,如果下一个元素返回元素而不是抛出异常,则返回true)。

  • 如果迭代器具有更多元素,则返回true

next

public MultiDataSet next() 

在迭代中返回下一个元素

  • 在迭代中返回下一个元素

remove

public void remove() 

从基础集合中移除由迭代器返回的最后一个元素(可选操作)。在每次调用next后,这个方法只能被调用一次。在除了此方法之外的任何方法迭代过程中,如果底层集合被修改,则迭代器的行为将不被指定。

  • 抛出  UnsupportedOperationException 如果remove操作不被这个迭代器支持
  • 抛出 IllegalStateException 如果next方法如果没有被调用,或remove在最后一次调用next方法之后已经被调用。
  • implSpec 默认的实现抛出一个UnsupportedOperationException实例然后不执行任何操作。

MultiDataSetIteratorAdapter

[源码]

将DataSetIterator适配到MultiDataSetIterator

猜你喜欢

转载自blog.csdn.net/bewithme/article/details/83780795