Iterable
MXNET中讀入數(shù)據(jù)需要使用到數(shù)據(jù)迭代器(Iter)罢低,用戶可以使用MXNET提供的一些數(shù)據(jù)迭代器也可以自己寫一個迭代器赁濒。雖然一般情況下昧互,我們很多的數(shù)據(jù)都可以直接讀入內存之中郭厌,但是面向神經網絡進行大數(shù)據(jù)學習時诫硕,學習的樣本往往達到了幾個GB甚至幾十上百個GB。這顯然是我們的內存所不能承受的。這樣的情況下声离,我們不得不分批次的將數(shù)據(jù)送入我們的學習網絡之中歇竟。迭代器的目的就是在需要數(shù)據(jù)的時候得到部分數(shù)據(jù),然后下次需要的時候能夠繼續(xù)獲得后續(xù)數(shù)據(jù)抵恋。在網上發(fā)現(xiàn)這篇Blog對迭代的概念解釋的非常好。
NDarray
numpy中的ndarray存儲數(shù)據(jù)時采用的是一維的形式宝磨。二維或者多維數(shù)組在numpy中采用“別樣”解讀的方式來實現(xiàn)弧关。比如,一個30元素可以看作5x6或者3x10
Super
dataiter = mx.io.ImageRecordIter(
#rec文件所在位置
path_imgrec="MNIST.rec",
#rec文件中圖像大小以及通道數(shù)量
data_shape=(3,28,28),
#每個batch中圖像的數(shù)量
batch_size=100,
#平均圖像唤锉,如果設置了平均圖像世囊,則輸入圖像將減去該平均圖像
mean_img="data/cifar/cifar10_mean.bin",
#隨機對圖像進行裁剪
rand_crop=True,
#隨機對圖像進行鏡像
rand_mirror=True,
#從rec文件中隨機取出圖像
shuffle=False,
#預處理線程數(shù)
preprocess_threads=4,
#預取緩存
prefetch_buffer=1)