import mxnet as mx nd_iterator = mx.io.NDArrayIter(data={'data': mx.nd.ones((100, 10))}, label={'softmax_label': mx.nd.ones((100, ))}, batch_size=25 ) # print( nd_iterator.provide_data) # print(nd_iterator.provide_label) data = mx.sym.Variable('data') label = mx.sym.Variable('softmax_label') fullc = mx.sym.FullyConnected(data=data, num_hidden=1) loss = mx.sym.SoftmaxOutput(data=fullc, label=label) mod = mx.mod.Module(loss, data_names=['data'], label_names=['softmax_label']) mod.bind(data_shapes=nd_iterator.provide_data, label_shapes=nd_iterator.provide_label) mod.fit(nd_iterator, num_epoch=2) # 下面看几个比较常见的 # mx.io.NDArrayIter(data, label=None, batch_size=1, shuffle=False, last_batch_handle='pad') # 这是一个类, 返回的是一个迭代器 # 比如 import numpy as np data = np.arange(40).reshape((10, 2, 2)) labels = np.ones([10, 1]) dataiter = mx.io.NDArrayIter(data=data, label=labels, batch_size=3, shuffle=True, last_batch_handle='pad') batch_num = 0 for batch in dataiter: print batch.data[0].asnumpy() print batch.data[0].shape batch_num += 1 print batch_num # 其中last_batch_handle如果是'pad'的话就会填充,如果是pad的话上面的batch_num 就是4, 如果是disard的话就会是3 # NDArrayIter也支持多个input和labels, # # 比如可以把刚才的 改成下面的。 # data = {'data1': np.zeros(shape=(10,2,2)), 'data2': np.zeros(shape=(20, 2, 2))} # label = {'label1': np.zeros(shape=(10, 1)), 'data2': np.zeros(shape=(20, 1))} # 下面的是一些关于图像数据常用的接口 mx.io.ImageRecordIter(*args, **kwargs) # 这个是图像 RecordIO files上的迭代器, # 可以先通过 im2rec.py 把原始的imgs pack 进 RecordIO files, # 然后可以像下面这样使用 data_iter = mx.io.ImageRecordIter( path_imgrec = './sample.rec', data_shape = (3, 227, 227), batch_size = 4, resize = 256 # Resize the shorter edge of 256 before cropping. ) batch = data_iter.next() # first batch imgs = batch.data[0] data_iter.reset() # 再从开始再restart the iterator # 还有一个 mxnet.io.ImageDetRecordIter(*args, **kwargs) # 这个是 create iterator for image detection dataset packed in recordio. # 我刻SSD里面就用了这个。
Mxnet Data Loading API
最新推荐文章于 2022-05-30 09:36:09 发布