DL4J中文文檔/模型/迭代器-1

什么是迭代器?

數(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è)引用到MultiLayerNetworkComputationGraph 的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);

image.gif

許多其他方法也接受迭代器來(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è)
}

image.gif

可用的迭代器


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) 

image.gif

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

next

public DataSet next(int batchSize) 

image.gif

用創(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-datasethttps://arxiv.org/abs/1702.05373

EmnistDataSetIterator

public EmnistDataSetIterator(Set dataSet, int batch, boolean train) throws IOException 

image.gif

EMNIST 數(shù)據(jù)集有多個(gè)不同的子集。 詳見 {- link EmnistDataSetIterator}。

numExamplesTrain

public static int numExamplesTrain(Set dataSet) 

image.gif

基于指定的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) 

image.gif

獲取指定子集的測(cè)試示例數(shù)。

  • 參數(shù) dataSet 獲取的子集
  • 返回指定子集的示例數(shù)

numLabels

public static int numLabels(Set dataSet) 

image.gif

獲取指定子集的標(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) 

image.gif

用指定的小批量創(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) 

image.gif

創(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()

image.gif

next

public DataSet next() 

image.gif

IrisDataSetIterator 處理遍歷Iris數(shù)據(jù)集。


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) 

image.gif

用隨機(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) 

image.gif

構(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() 

image.gif

是否有下一條數(shù)據(jù)。

loadFromMetaData

public DataSet loadFromMetaData(RecordMetaData recordMetaData) throws IOException 

image.gif

使用所提供的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 

image.gif

使用所提供的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() 

image.gif

當(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 

image.gif

使用所提供的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 

image.gif

使用所提供的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()
}

image.gif

示例 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()
}

image.gif

RecordReaderDataSetIterator

public RecordReaderDataSetIterator(RecordReader recordReader, int batchSize) 

image.gif

分類構(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)
image.gif

分類的主要構(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 

image.gif

使用提供的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 

image.gif

使用提供的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)

image.gif

RecordReaderDataSetIterator 的構(gòu)建類

maxNumBatches

public Builder maxNumBatches(int maxNumBatches)

image.gif

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

  • 參數(shù) maxNumBatches 每個(gè)epoch / 重置的小批量的最大數(shù)值

regression

public Builder regression(int labelIndex)

image.gif

將其用于單輸出回歸(即,1輸出/回歸目標(biāo))

  • 參數(shù) labelIndex 包含回歸目標(biāo)的列索引(索引從0開始)

regression

public Builder regression(int labelIndexFrom, int labelIndexTo)

image.gif

將其用于多個(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)

image.gif

這個(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)

image.gif

可選的參數(shù)。允許設(shè)置預(yù)處理器

  • 參數(shù) preProcessor 是要使用的預(yù)處理器

collectMetaData

public Builder collectMetaData(boolean collectMetaData)

image.gif

當(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) 

image.gif
  • 參數(shù) iterator 用于分離值的底層迭代器

ExistingDataSetIterator

[源碼]

ExistingDataSetIterator

public ExistingDataSetIterator(@NonNull Iterator<DataSet> iterator) 

image.gif

注意,在使用此構(gòu)造函數(shù)時(shí),不支持重置。

  • 參數(shù) iterator 用于包裝的迭代器

next

public DataSet next(int num) 

image.gif

注意,在使用此構(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)

image.gif
  • 參數(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) 

image.gif

創(chuàng)建一個(gè)默認(rèn)隊(duì)列大小為8的異步迭代器

  • 參數(shù) baseIterator 底層迭代器用于異步方式包裝和獲取

next

public DataSet next(int num) 

image.gif

創(chuàng)建一個(gè)默認(rèn)隊(duì)列大小為8的異步迭代器

  • 參數(shù) baseIterator 底層迭代器用于異步方式包裝和獲取

  • 參數(shù) queue 隊(duì)列大小

inputColumns

public int inputColumns() 

image.gif

數(shù)據(jù)集的輸入列

  • return

totalOutcomes

public int totalOutcomes() 

image.gif

數(shù)據(jù)集的標(biāo)簽數(shù)量

  • return

resetSupported

public boolean resetSupported() 

image.gif

這個(gè)DataSetIterator支持重置嗎?許多DataSetIterator支持重置,但有些不支持。

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

asyncSupported

public boolean asyncSupported() 

image.gif

這個(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() 

image.gif

將迭代器重置為開始。

shutdown

public void shutdown() 

image.gif

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

batch

public int batch() 

image.gif

批量大小

  • return

setPreProcessor

public void setPreProcessor(DataSetPreProcessor preProcessor) 

image.gif

設(shè)置預(yù)處理器

  • 參數(shù) preProcessor 要設(shè)置的預(yù)處理器

getPreProcessor

public DataSetPreProcessor getPreProcessor() 

image.gif

返回預(yù)處理器,如果定義

  • return

hasNext

public boolean hasNext() 

image.gif

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

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

next

public DataSet next() 

image.gif

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

  • 返回迭代中的下一個(gè)元素

remove

public void remove() 

image.gif

從基礎(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) 

image.gif
  • 參數(shù) files 用于迭代的文件列表
  • 參數(shù) callback 加載文件的回調(diào)

AsyncShieldMultiDataSetIterator

[源碼]

此包裝器使用現(xiàn)有的MultiDataSetIterator實(shí)現(xiàn),并防止異步預(yù)取。

next

public MultiDataSet next(int num) 

image.gif

獲取下“Num”個(gè)示例。類似于next方法,但返回指定數(shù)量的示例。

  • 參數(shù) num 獲取示例數(shù)量

setPreProcessor

public void setPreProcessor(MultiDataSetPreProcessor preProcessor) 

image.gif

在每個(gè)MultiDataSet返回之前,將預(yù)處理器設(shè)置到每個(gè)MultiDataSet。

  • 參數(shù) preProcessor MultiDataSet的預(yù)處理器,可以為空。

resetSupported

public boolean resetSupported() 

image.gif

這個(gè)DataSetIterator支持重置嗎?許多DataSetIterator支持重置,但有些不支持。

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

asyncSupported

public boolean asyncSupported() 

image.gif

這個(gè)DataSetIterator是否支持異步預(yù)取多個(gè)DataSet對(duì)象?

請(qǐng)注意:這個(gè)迭代器總是返回false

  • 如果來(lái)自此迭代器的異步預(yù)取是支持的返回true;如果異步預(yù)取不應(yīng)用于此迭代器,則返回false

reset

public void reset() 

image.gif

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

hasNext

public boolean hasNext() 

image.gif

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

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

next

public MultiDataSet next() 

image.gif

在迭代中返回下一個(gè)元素

  • 在迭代中返回下一個(gè)元素

remove

public void remove() 

image.gif

從基礎(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() 

image.gif

此方法返回訓(xùn)練迭代器實(shí)例。

  • return

next

public DataSet next(int i) 

image.gif

此方法返回測(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) 

image.gif

構(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)一樣的男子

image

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

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,157評(píng)論 25 708
  • 茶陵縣特殊學(xué)校送教上門教師培訓(xùn)暨表彰大會(huì)。李明林書記主持講話,周忠元校長(zhǎng)做主題講話《做好校本教研 提升教師素養(yǎng)》,...
    東陽(yáng)日臻閱讀 233評(píng)論 0 0
  • 我從事教育工作已經(jīng)12年了,在教壇中從一棵小草磨練到了一棵小樹,雖不能完全遮風(fēng)擋雨,但也能深諳這塊土地的風(fēng)風(fēng)雨雨。...
    一水的簡(jiǎn)書閱讀 849評(píng)論 6 2
  • 生活總是逼著人成長(zhǎng),我從畢業(yè)進(jìn)了現(xiàn)在的公司已經(jīng)一年半多時(shí)間了,上周領(lǐng)導(dǎo)跟我談了9月份的工作情況,簽了工作以...
    歡樂(lè)小主閱讀 1,714評(píng)論 14 40

友情鏈接更多精彩內(nèi)容