DL4J中文文件/模型/迭代器
什麼是迭代器?
資料集迭代器允許將資料輕鬆載入到神經網路中,並幫助組織批處理、轉換和掩碼。包含在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資料集迭代器)
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資料集。
- 引數 batch 批量大小
- 引數 numExamples 示例的總數
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
對的第一個值是特徵向量,對的第二個值是標籤。
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 hasNex