什么是迭代器?
數(shù)據(jù)集迭代器允許將數(shù)據(jù)輕松加載到神經(jīng)網(wǎng)絡(luò)中,并幫助組織批處理、轉(zhuǎn)換和掩碼。包含在Eclipse DL4J中的迭代器有助于用戶提供的數(shù)據(jù),或者自動(dòng)加載公共的基準(zhǔn)數(shù)據(jù)集如MNIST和IRIS。
用法
對(duì)于大多數(shù)用例,初始化迭代器和傳遞一個(gè)引用到MultiLayerNetwork或ComputationGraph 的fit()方法是開始訓(xùn)練任務(wù)所需的全部?jī)?nèi)容:
MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
// 傳入一個(gè) MNIST 數(shù)據(jù)集迭代器,自動(dòng)獲取數(shù)據(jù)
DataSetIterator mnistTrain = new MnistDataSetIterator(batchSize, true, rngSeed);
net.fit(mnistTrain);

許多其他方法也接受迭代器來(lái)完成任務(wù),例如評(píng)估:
// 直接傳遞給神經(jīng)網(wǎng)絡(luò)
DataSetIterator mnistTest = new MnistDataSetIterator(batchSize, false, rngSeed);
net.eval(mnistTest);
//使用一個(gè)評(píng)估類
Evaluation eval = new Evaluation(10); //創(chuàng)建一個(gè)帶有10個(gè)可能分類的評(píng)估對(duì)象
while(mnistTest.hasNext()){
DataSet next = mnistTest.next();
INDArray output = model.output(next.getFeatureMatrix()); //得到網(wǎng)絡(luò)預(yù)測(cè)
eval.eval(next.getLabels(), output); //檢查對(duì)真實(shí)分類的預(yù)測(cè)
}

可用的迭代器
CifarDataSetIterator (CIFAR10數(shù)據(jù)集迭代器)
CifarDataSetIterator是CIFAR10數(shù)據(jù)集的迭代器,10個(gè)分類,32x32圖像 3通道(RGB)還支持用于基于Sergey Zagoruyko示例https://github.com/szagoruyko/cifar.torch 對(duì)數(shù)據(jù)集進(jìn)行歸一化的特殊預(yù)處理器。
CifarDataSetIterator
public CifarDataSetIterator(int batchSize, int numExamples)

用創(chuàng)建器返回的batchSize與numExamples加載圖片。
next
public DataSet next(int batchSize)

用創(chuàng)建器返回的batchSize、numExamples與version加載圖片。
EmnistDataSetIterator (EMNIST 數(shù)據(jù)集迭代器)
EMNIST 數(shù)據(jù)集迭代器
- COMPLETE: 也稱為 “ByClass” 分割。 共計(jì)814,255 個(gè)示例(訓(xùn)練 + 測(cè)試), 62 個(gè)分類
- MERGE: 也稱為“ByMerge”分割。共計(jì)814255個(gè)示例。47個(gè)不平衡分類。對(duì)于字母C、I、J、K、L、M、O、P、S、U、V、W、X、Y和Z,為每個(gè)字母(而不是2個(gè))將小寫字母和大寫字母(難以區(qū)分)組合為一個(gè)類
- BALANCED: 總計(jì) 131,600 示例。 47 個(gè)分類 (每個(gè)分類都有相同數(shù)量的例子)
- LETTERS: 總計(jì)145,600 示例。 26 個(gè)平衡分類。
- DIGITS: 總計(jì) 280,000 示例。 10 個(gè)平衡分類。
查看: 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 數(shù)據(jù)集有多個(gè)不同的子集。 詳見 {- link EmnistDataSetIterator}。
numExamplesTrain
public static int numExamplesTrain(Set dataSet)

基于指定的RNG種子創(chuàng)建具有隨機(jī)混洗數(shù)據(jù)的EMNIST迭代器
- 參數(shù) dataSet 用于返回的數(shù)據(jù)集
- 參數(shù) batchSize批量大小
- 參數(shù) train 如果為 true: 使用訓(xùn)練集。 如果 false: 使用測(cè)試集
- 參數(shù) seed Random number generator seed
numExamplesTest
public static int numExamplesTest(Set dataSet)

獲取指定子集的測(cè)試示例數(shù)。
- 參數(shù) dataSet 獲取的子集
- 返回指定子集的示例數(shù)
numLabels
public static int numLabels(Set dataSet)

獲取指定子集的標(biāo)簽數(shù)量
- 參數(shù) dataSet 要獲取的子集
- 返回指定子集的標(biāo)簽數(shù)
isBalanced
public static boolean isBalanced(Set dataSet)
[圖片上傳失敗...(image-43c115-1542371094659)]
在訓(xùn)練集中標(biāo)簽是否平衡(即:每個(gè)標(biāo)簽的實(shí)例數(shù)是否相等)?
- 返回true或false
UciSequenceDataSetIterator (UCI數(shù)據(jù)庫(kù)是加州大學(xué)歐文分校(University of CaliforniaIrvine)提出的用于機(jī)器學(xué)習(xí)的數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)目前共有335個(gè)數(shù)據(jù)集,其數(shù)目還在不斷增加,UCI數(shù)據(jù)集是一個(gè)常用的標(biāo)準(zhǔn)測(cè)試數(shù)據(jù)集。)
UCI合成控制圖時(shí)間序列數(shù)據(jù)集。該數(shù)據(jù)集可用于六類單變量時(shí)間序列的分類:正常,周期性,遞增趨勢(shì),遞減趨勢(shì),向上移位,向下移位
詳情: https://archive.ics.uci.edu/ml/datasets/Synthetic+Control+Chart+Time+Series
數(shù)據(jù): 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)

用指定的小批量創(chuàng)建訓(xùn)練集的迭代器。RNG種子123隨機(jī)化
- 參數(shù) batchSize 小批量大小
LFWDataSetIterator (LFW數(shù)據(jù)集是為了研究 非限制環(huán)境下的人臉識(shí)別問(wèn)題而建立。這個(gè)集合包含超過(guò)13,000張人臉圖像(全部來(lái)自于internet,而不是實(shí)驗(yàn)室環(huán)境))
LFW 迭代器 - 來(lái)自非限制環(huán)境中的標(biāo)注人臉
查看 http://vis-www.cs.umass.edu/lfw/
總計(jì)13233圖片,5749 個(gè)分類。
LFWDataSetIterator
public LFWDataSetIterator(int batchSize, int numExamples, int[] imgDim, int numLabels, boolean useSubset,
PathLabelGenerator labelGenerator, boolean train, double splitTrainTest,
ImageTransform imageTransform, Random rng)

創(chuàng)建 LFW 數(shù)據(jù)特有迭代器
參數(shù) batchSize 示例的批量大小
參數(shù) numExamples 示例總數(shù)
參數(shù) imgDim 高度、寬度和通道的數(shù)組
參數(shù) numLabels 示例總數(shù)
參數(shù) useSubset 使用LFW數(shù)據(jù)集的一個(gè)子集
參數(shù) labelGenerator 路徑標(biāo)注生成器使用
參數(shù) train 如果使用訓(xùn)練值則為true
參數(shù) splitTrainTest 為將要測(cè)試的訓(xùn)練和保留分割數(shù)據(jù)的百分比
參數(shù) imageTransform 如何轉(zhuǎn)換圖片
參數(shù) rng 批量洗牌中的要鎖定的隨機(jī)數(shù)
MnistDataSetIterator (手寫數(shù)字?jǐn)?shù)據(jù)集迭代器)
MNIST 數(shù)據(jù)集迭代器 - 60000 個(gè)訓(xùn)練樣本,10000個(gè)測(cè)試樣本, 10 個(gè)分類。數(shù)字有 28x28 像素與一個(gè)通道 (灰度)。
更多詳情查看 http://yann.lecun.com/exdb/mnist/
IrisDataSetIterator (鳶尾花卉數(shù)據(jù)集迭代器)
IrisDataSetIterator: 一個(gè)眾所周知的Iris數(shù)據(jù)集的迭代器。4個(gè)特征,3個(gè)標(biāo)簽類
https://archive.ics.uci.edu/ml/datasets/Iris
IrisDataSetIterator
public IrisDataSetIterator()

next
public DataSet next()

IrisDataSetIterator 處理遍歷Iris數(shù)據(jù)集。
參數(shù) batch 批量大小
參數(shù) numExamples 示例的總數(shù)
TinyImageNetDataSetIterator
Tiny ImageNet是ImageNet數(shù)據(jù)庫(kù)的子集。TinyImageNet是斯坦福大學(xué)CS321N的默認(rèn)課程挑戰(zhàn)。
Tiny ImageNet有200個(gè)分類,每個(gè)分類由500個(gè)訓(xùn)練圖像組成。
圖像是64×64像素,RGB。
查看: http://cs231n.stanford.edu/ 和 https://tiny-imagenet.herokuapp.com/
TinyImageNetDataSetIterator
public TinyImageNetDataSetIterator(int batchSize)

用隨機(jī)迭代順序(RNG種子固定到123)創(chuàng)建訓(xùn)練集的迭代器
- 參數(shù) batchSize 迭代器小批次大小
SequenceRecordReaderDataSetIterator
序列記錄讀取器數(shù)據(jù)集迭代器。
給定一個(gè)記錄讀取器(和可選的另一個(gè)用于標(biāo)簽的記錄讀取器)生成時(shí)間序列(序列)數(shù)據(jù)集。
支持一對(duì)多和多對(duì)一類型數(shù)據(jù)加載的填充(即,具有不同數(shù)量的輸入vs)。
SequenceRecordReaderDataSetIterator
public SequenceRecordReaderDataSetIterator(SequenceRecordReader featuresReader, SequenceRecordReader labels,
int miniBatchSize, int numPossibleLabels)

構(gòu)造函數(shù),其中特征和標(biāo)簽來(lái)自不同的RecordReader(例如,不同的文件),標(biāo)簽用于分類。
- 參數(shù) featuresReader 特征SequenceRecordReader
- 參數(shù) labels 標(biāo)簽: 假設(shè)每個(gè)時(shí)間步的單個(gè)值,其中值是0到NoMaulabeleBels-1范圍內(nèi)的整數(shù)。
- 參數(shù) miniBatchSize 每次調(diào)用next()的小批次大小
- 參數(shù) numPossibleLabels 標(biāo)簽的分類數(shù)
hasNext
public boolean hasNext()

是否有下一條數(shù)據(jù)。
loadFromMetaData
public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException

使用所提供的RecordMetaData將單個(gè)序列示例加載到數(shù)據(jù)集。請(qǐng)注意,一次加載多個(gè)實(shí)例更為有效率。使用 {- link #loadFromMetaData(List)}
- 參數(shù) recordMetaData 從中加載的記錄元數(shù)據(jù)。應(yīng)該由給定的記錄讀取器產(chǎn)生。
- 使用指定的示例返回DataSet
- 加載數(shù)據(jù)時(shí)如果發(fā)生錯(cuò)誤則拋出IOException
loadFromMetaData
public DataSet loadFromMetaData(List<RecordMetaData> list) throws IOException

使用所提供的RecordMetaData實(shí)例加載多個(gè)序列示例到數(shù)據(jù)集。
- 參數(shù) list從中加載的RecordMetaData實(shí)例列表。應(yīng)該是由提供給SequenceRecordReaderDataSetIterator 構(gòu)造器的記錄讀取器產(chǎn)生。
- 用指定的示例返回DataSet
- 加載數(shù)據(jù)時(shí)如果發(fā)生錯(cuò)誤則拋出IOException
RecordReaderMultiDataSetIterator (記錄讀取器多數(shù)據(jù)集迭代器)
思想:從一個(gè)或多個(gè)序列/記錄讀取器產(chǎn)生多個(gè)輸入和多個(gè)輸出。輸入和輸出可以從RecordReader和SequenceRecordReaders列的子集獲得(例如,一些輸入和輸出作為相同記錄/序列中的不同列);還可以混合不同類型的數(shù)據(jù)(例如,在同一個(gè)RecordReaderMultiDataSetIterator使用RecordReader和SequenceRecordReaders)。
輸入和子集。
RecordReaderMultiDataSetIterator
public RecordReaderMultiDataSetIterator build()

當(dāng)處理不同長(zhǎng)度的時(shí)間序列數(shù)據(jù)時(shí),我們應(yīng)該如何對(duì)齊輸入/標(biāo)簽時(shí)間序列?對(duì)于等長(zhǎng)度:使用EQUAL_LENGTH進(jìn)行序列分類:使用ALIGN_END
loadFromMetaData
public MultiDataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException

使用所提供的RecordMetaData將單個(gè)序列示例加載到數(shù)據(jù)集。請(qǐng)注意,一次加載多個(gè)實(shí)例更為有效率。使用 {- link #loadFromMetaData(List)}
- 參數(shù) recordMetaData 從中加載的記錄元數(shù)據(jù)。應(yīng)該由給定的記錄讀取器產(chǎn)生。
- 使用指定的示例返回DataSet
- 加載數(shù)據(jù)時(shí)如果發(fā)生錯(cuò)誤則拋出IOException
loadFromMetaData
public MultiDataSet loadFromMetaData(List<RecordMetaData> list) throws IOException

使用所提供的RecordMetaData實(shí)例加載多個(gè)序列示例到數(shù)據(jù)集。
- 參數(shù) list從中加載的RecordMetaData實(shí)例列表。應(yīng)該是由提供給SequenceRecordReaderDataSetIterator 構(gòu)造器的記錄讀取器產(chǎn)生。
- 用指定的示例返回DataSet
- 加載數(shù)據(jù)時(shí)如果發(fā)生錯(cuò)誤則拋出IOException
RecordReaderDataSetIterator
DataSet對(duì)象以及從各個(gè)記錄生成小批量。
示例 1: 圖像分類, 批量大小32, 10 個(gè)分類
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): 標(biāo)簽分類的數(shù)量(即10 個(gè)用于 MNIST - 10 個(gè)用于數(shù)字)
.classification(1, nClasses)
.preProcessor(new ImagePreProcessingScaler()) //用于把圖片值從0-255歸一化到0-1
.build()
}

示例 2: 來(lái)自CSV的多輸出回歸, 批量大小 128
rr.initialize(new FileSplit(new File("/path/to/myCsv.txt")));
DataSetIterator iter = new RecordReaderDataSetIterator.Builder(rr, 128)
//指定回歸 標(biāo)簽/目標(biāo)出現(xiàn)的列。注意所有其它列都被當(dāng)作特征。列索引從0開始。
.regression(labelColFrom, labelColTo)
.build()
}

RecordReaderDataSetIterator
public RecordReaderDataSetIterator(RecordReader recordReader, int batchSize)

分類構(gòu)造器:
(a) 標(biāo)簽索引被假定為最后一個(gè)可寫/列,并且
(b) 從 RecordReader.getLabels()中推斷類的數(shù)目
注意,如果RecordReader.getLabels()返回NULL,則不會(huì)產(chǎn)生輸出標(biāo)簽。
- 參數(shù) recordReader 作為數(shù)據(jù)源的記錄讀取器
- 參數(shù) batchSize用于每次 .next() 調(diào)用的小批次大小
setCollectMetaData
public RecordReaderDataSetIterator(RecordReader recordReader, int batchSize, int labelIndex,int numPossibleLabels)

分類的主要構(gòu)造器。這將將輸入類索引(在位置labelIndex中,整數(shù)值0到numPossibleLabels-1包含)轉(zhuǎn)換為適當(dāng)?shù)膐ne-hot輸出/標(biāo)簽表示。
- 參數(shù) recordReader 記錄讀取器: 提供數(shù)據(jù)源
- 參數(shù) batchSize 批量大小 (示例數(shù)量) 用于輸出數(shù)據(jù)集對(duì)象
- 參數(shù) labelIndex 標(biāo)簽 Writable (通常是一個(gè) IntWritable)的索引, 由recordReader.next()獲得
- 參數(shù) numPossibleLabels 分類的數(shù)量(可能的標(biāo)簽)
loadFromMetaData
public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException

使用提供的RealDataMeta將單個(gè)示例加載到DataSet。請(qǐng)注意,同時(shí)加載多個(gè)實(shí)例更為有效。使用 {- link #loadFromMetaData(List)}
- 參數(shù) recordMetaData 用于加載的 RecordMetaData。應(yīng)該由給定的記錄讀取器產(chǎn)生
- 返回指定示例的 DataSet
- 如果加載數(shù)據(jù)期間發(fā)生錯(cuò)誤則拋出 IOException
loadFromMetaData
public DataSet loadFromMetaData(List<RecordMetaData> list) throws IOException

使用提供的RealDataMeta實(shí)例將多個(gè)示例加載到數(shù)據(jù)集。
- 參數(shù) list 是用于加載的RecordMetaData 實(shí)例列表。應(yīng)該是由提供給ReadReadReadDeader的構(gòu)造函數(shù)的記錄讀取器生成的
- 返回指定示例的 DataSet
- 如果加載數(shù)據(jù)期間發(fā)生錯(cuò)誤則拋出 IOException
writableConverter
public Builder writableConverter(WritableConverter converter)

RecordReaderDataSetIterator 的構(gòu)建類
maxNumBatches
public Builder maxNumBatches(int maxNumBatches)

可選參數(shù),通常不使用。如果設(shè)置,則可以用來(lái)限制將返回的小批量的最大值(在重置之間)。如果沒(méi)有設(shè)置,將總是返回盡可能多的小批量,因?yàn)橛锌捎玫臄?shù)據(jù)。
- 參數(shù) maxNumBatches 每個(gè)epoch / 重置的小批量的最大數(shù)值
regression
public Builder regression(int labelIndex)

將其用于單輸出回歸(即,1輸出/回歸目標(biāo))
- 參數(shù) labelIndex 包含回歸目標(biāo)的列索引(索引從0開始)
regression
public Builder regression(int labelIndexFrom, int labelIndexTo)

將其用于多個(gè)輸出回歸(1個(gè)或更多的輸出/回歸目標(biāo))。請(qǐng)注意,所有回歸目標(biāo)必須是連續(xù)的(即,位置x到y(tǒng),沒(méi)有間隙)。
- 參數(shù) labelIndexFrom 第一個(gè)回歸目標(biāo)的列索引(索引開始于0)
- 參數(shù) labelIndexTo 最后一個(gè)回歸目標(biāo)的列索引(包括)
classification
public Builder classification(int labelIndex, int numClasses)

這個(gè)用于分類
- 參數(shù) labelIndex 標(biāo)簽索引。列(從0開始索引)是一個(gè)整數(shù)的值,而且包括0 到 numClasses-1 的值
- 參數(shù) numClasses 標(biāo)簽類別數(shù)量 (即數(shù)據(jù)集中的類別/類數(shù))
preProcessor
public Builder preProcessor(DataSetPreProcessor preProcessor)

可選的參數(shù)。允許設(shè)置預(yù)處理器
- 參數(shù) preProcessor 是要使用的預(yù)處理器
collectMetaData
public Builder collectMetaData(boolean collectMetaData)

當(dāng)設(shè)置為true時(shí):當(dāng)前示例的元數(shù)據(jù)將出現(xiàn)在返回的數(shù)據(jù)集中。默認(rèn)情況下禁用。
- 參數(shù) collectMetaData 是否應(yīng)該收集元數(shù)據(jù)
WorkspacesShieldDataSetIterator
這個(gè)迭代器分離/遷移來(lái)自支持DataSetIterator的數(shù)據(jù)集,從而提供“安全”數(shù)據(jù)集。
這通常用于調(diào)試和測(cè)試目的,一般不應(yīng)該由用戶使用。
WorkspacesShieldDataSetIterator
public WorkspacesShieldDataSetIterator(@NonNull DataSetIterator iterator)

- 參數(shù) iterator 用于分離值的底層迭代器
ExistingDataSetIterator
ExistingDataSetIterator
public ExistingDataSetIterator(@NonNull Iterator<DataSet> iterator)

注意,在使用此構(gòu)造函數(shù)時(shí),不支持重置。
- 參數(shù) iterator 用于包裝的迭代器
next
public DataSet next(int num)

注意,在使用此構(gòu)造函數(shù)時(shí),不支持重置。
參數(shù) iterator 用于包裝的迭代器
參數(shù) labels 字符串標(biāo)簽。可能為空。
CombinedMultiDataSetPreProcessor
組合構(gòu)建器中按指定的順序應(yīng)用的各種多數(shù)據(jù)集預(yù)處理器。
CombinedMultiDataSetPreProcessor
public Builder addPreProcessor(@NonNull MultiDataSetPreProcessor preProcessor)

- 參數(shù) preProcessor 要添加到要應(yīng)用的預(yù)處理器列表中的預(yù)處理器
DataSetFetcher
用于將數(shù)據(jù)集加載到內(nèi)存中的低級(jí)接口。
這是由DataSetIterator程序用來(lái)處理內(nèi)存中加載數(shù)據(jù)的細(xì)節(jié)。
AsyncDataSetIterator
用于DataSetIterator實(shí)現(xiàn)的異步預(yù)獲取迭代器包裝器。這將異步地從基礎(chǔ)迭代器中預(yù)獲取指定數(shù)量的小批量。
還可以選擇(默認(rèn)情況下對(duì)大多數(shù)構(gòu)造函數(shù)啟用)使用循環(huán)工作間,以避免創(chuàng)建具有堆外內(nèi)存的INDArrays,這些內(nèi)存需要由JVM垃圾收集器清理。
注意,適當(dāng)?shù)腄L4J fit方法會(huì)自動(dòng)使用這個(gè)迭代器,因此用戶在擬合網(wǎng)絡(luò)時(shí)不需要手動(dòng)包裝迭代器。
AsyncDataSetIterator
public AsyncDataSetIterator(DataSetIterator baseIterator)

創(chuàng)建一個(gè)默認(rèn)隊(duì)列大小為8的異步迭代器
- 參數(shù) baseIterator 底層迭代器用于異步方式包裝和獲取
next
public DataSet next(int num)

創(chuàng)建一個(gè)默認(rèn)隊(duì)列大小為8的異步迭代器
參數(shù) baseIterator 底層迭代器用于異步方式包裝和獲取
參數(shù) queue 隊(duì)列大小
inputColumns
public int inputColumns()

數(shù)據(jù)集的輸入列
- return
totalOutcomes
public int totalOutcomes()

數(shù)據(jù)集的標(biāo)簽數(shù)量
- return
resetSupported
public boolean resetSupported()

這個(gè)DataSetIterator支持重置嗎?許多DataSetIterator支持重置,但有些不支持。
- 如果支持重置方法,返回true;否則為false
asyncSupported
public boolean asyncSupported()

這個(gè)DataSetIterator是否支持異步預(yù)取多個(gè)DataSet對(duì)象?大多數(shù)DataSetIterator都可以,但是在某些情況下,將此迭代器包裝到執(zhí)行異步預(yù)取的迭代器中可能沒(méi)有意義。例如,對(duì)于以下類型的迭代器使用異步預(yù)取是沒(méi)有意義的:(a)已經(jīng)將它們的全部?jī)?nèi)容存儲(chǔ)在內(nèi)存中的迭代器(b)重復(fù)使用特性/標(biāo)簽數(shù)組的迭代器(因?yàn)閷?lái)的next()調(diào)用將覆蓋過(guò)去的內(nèi)容)(c)已經(jīng)實(shí)現(xiàn)某種級(jí)別的異步預(yù)取的迭代器(d)返回不同的數(shù)據(jù)的迭代器,取決于何時(shí)調(diào)用next()方法。
- 如果來(lái)自此迭代器的異步預(yù)取是可用的則返回true;如果異步預(yù)取不應(yīng)用于此迭代器,則返回false
reset
public void reset()

將迭代器重置為開始。
shutdown
public void shutdown()

我們希望確保,后臺(tái)線程將具有相同的線程->設(shè)備類似,作為主線程。
batch
public int batch()

批量大小
- return
setPreProcessor
public void setPreProcessor(DataSetPreProcessor preProcessor)

設(shè)置預(yù)處理器
- 參數(shù) preProcessor 要設(shè)置的預(yù)處理器
getPreProcessor
public DataSetPreProcessor getPreProcessor()

返回預(yù)處理器,如果定義
- return
hasNext
public boolean hasNext()

如果迭代器具有更多元素,則返回true。(換句話說(shuō),如果下一個(gè)元素返回元素而不是拋出異常,則返回true)。
- 如果迭代器具有更多元素,則返回true
next
public DataSet next()

返回迭代中的下一個(gè)元素。
- 返回迭代中的下一個(gè)元素
remove
public void remove()

從基礎(chǔ)集合中移除由迭代器返回的最后一個(gè)元素(可選操作)。在每次調(diào)用next后,這個(gè)方法只能被調(diào)用一次。在除了此方法之外的任何方法迭代過(guò)程中,如果底層集合被修改,則迭代器的行為將不被指定。
- 拋出 UnsupportedOperationException 如果remove操作不被這個(gè)迭代器支持
- 拋出 IllegalStateException 如果next方法如果沒(méi)有被調(diào)用,或remove在最后一次調(diào)用next方法之后已經(jīng)被調(diào)用。
- implSpec 默認(rèn)的實(shí)現(xiàn)拋出一個(gè)UnsupportedOperationException實(shí)例然后不執(zhí)行任何操作。
FileSplitDataSetIterator
與文件列表一起工作的簡(jiǎn)單的迭代器。文件到DataSet轉(zhuǎn)換將通過(guò)提供的FileCallback實(shí)現(xiàn)來(lái)處理。
FileSplitDataSetIterator
public FileSplitDataSetIterator(@NonNull List<File> files, @NonNull FileCallback callback)

- 參數(shù) files 用于迭代的文件列表
- 參數(shù) callback 加載文件的回調(diào)
AsyncShieldMultiDataSetIterator
此包裝器使用現(xiàn)有的MultiDataSetIterator實(shí)現(xiàn),并防止異步預(yù)取。
next
public MultiDataSet next(int num)

獲取下“Num”個(gè)示例。類似于next方法,但返回指定數(shù)量的示例。
- 參數(shù) num 獲取示例數(shù)量
setPreProcessor
public void setPreProcessor(MultiDataSetPreProcessor preProcessor)

在每個(gè)MultiDataSet返回之前,將預(yù)處理器設(shè)置到每個(gè)MultiDataSet。
- 參數(shù) preProcessor MultiDataSet的預(yù)處理器,可以為空。
resetSupported
public boolean resetSupported()

這個(gè)DataSetIterator支持重置嗎?許多DataSetIterator支持重置,但有些不支持。
- 如果支持重置方法,返回true;否則為false
asyncSupported
public boolean asyncSupported()

這個(gè)DataSetIterator是否支持異步預(yù)取多個(gè)DataSet對(duì)象?
請(qǐng)注意:這個(gè)迭代器總是返回false
- 如果來(lái)自此迭代器的異步預(yù)取是支持的返回true;如果異步預(yù)取不應(yīng)用于此迭代器,則返回false
reset
public void reset()

將迭代器重置為開始狀態(tài)。
hasNext
public boolean hasNext()

如果迭代器具有更多元素,則返回true。(換句話說(shuō),如果下一個(gè)元素返回元素而不是拋出異常,則返回true)。
- 如果迭代器具有更多元素,則返回true
next
public MultiDataSet next()

在迭代中返回下一個(gè)元素
- 在迭代中返回下一個(gè)元素
remove
public void remove()

從基礎(chǔ)集合中移除由迭代器返回的最后一個(gè)元素(可選操作)。在每次調(diào)用next后,這個(gè)方法只能被調(diào)用一次。在除了此方法之外的任何方法迭代過(guò)程中,如果底層集合被修改,則迭代器的行為將不被指定。
- 拋出 UnsupportedOperationException 如果remove操作不被這個(gè)迭代器支持
- 拋出 IllegalStateException 如果next方法如果沒(méi)有被調(diào)用,或remove在最后一次調(diào)用next方法之后已經(jīng)被調(diào)用。
- implSpec 默認(rèn)的實(shí)現(xiàn)拋出一個(gè)UnsupportedOperationException實(shí)例然后不執(zhí)行任何操作。
DataSetIteratorSplitter
這個(gè)迭代器實(shí)際上將給定的MultiDataSetIterator分割成訓(xùn)練和測(cè)試部分。也就是說(shuō),你有100000個(gè)例子。你的批量大小是32。這意味著你有3125個(gè)總批次。分割比例為0.7,這將給你2187個(gè)訓(xùn)練批次,和938個(gè)測(cè)試批次。
請(qǐng)注意:你不能一行中使用測(cè)試迭代器兩次。訓(xùn)練迭代器應(yīng)該在測(cè)試迭代器使用之前被使用。
請(qǐng)注意:如果底層迭代器使用epoch間的隨機(jī)化/洗牌,則不能使用此迭代器。
DataSetIteratorSplitter
public DataSetIteratorSplitter(@NonNull DataSetIterator baseIterator, long totalBatches, double ratio)
[圖片上傳失敗...(image-114d85-1542371094657)]
惟一的構(gòu)造器
- 參數(shù) baseIterator - 要被包裝和分割的迭代器
- 參數(shù) totalBatches - 基礎(chǔ)迭代器中的總批次
- 參數(shù) ratio -訓(xùn)練/測(cè)試 分割比例
getTrainIterator
public DataSetIterator getTrainIterator()

此方法返回訓(xùn)練迭代器實(shí)例。
- return
next
public DataSet next(int i)

此方法返回測(cè)試迭代器實(shí)例。
- return
IteratorMultiDataSetIterator
按要求獲取指定批次大小。
通常用于Spark訓(xùn)練,但可用于其他地方。注意:這里不支持重置方法。
EarlyTerminationMultiDataSetIterator
建立一個(gè)迭代器,一旦小批量.next()返回的數(shù)量等于指定的數(shù)目這個(gè)迭代器即會(huì)終止。
注意,對(duì).next(num)的調(diào)用被計(jì)數(shù)為返回小批量的調(diào)用,而不管num的值如何。這實(shí)際上將數(shù)據(jù)限制為這個(gè)小批量的指定數(shù)量。
EarlyTerminationMultiDataSetIterator
public EarlyTerminationMultiDataSetIterator(MultiDataSetIterator underlyingIterator, int terminationPoint)

構(gòu)造函數(shù)采用迭代器進(jìn)行包裝,然后對(duì)hasNext()調(diào)用后返回false時(shí)的小批量。
- 參數(shù) underlyingIterator, 進(jìn)行包裝的迭代器
- 參數(shù) terminationPoint, 在hasNext()被調(diào)用后會(huì)返回false時(shí)的小批量
翻譯:風(fēng)一樣的男子

如果您覺(jué)得我的文章給了您幫助,請(qǐng)為我買一杯飲料吧!以下是我的支付寶,意思一下我將非常感激!
