5 python machine-learning large-data
我有两个相当大的PyTables EArray,其中包含回归任务的输入和标签。输入数组为4d(55k x 128 x 128 x 3),标签数组为1d(55k)。我有一个在Keras中指定的NN体系结构,我想在此数据上进行训练,但是有两个问题。
如何根据训练/测试索引选择HDF5阵列的子集(输入和输出)并训练训练子集,而不必一次将它们全部读入内存?有什么方法可以创建磁盘切片的“视图”,并且可以将Keras视为常规NumPy ndarray?
到目前为止,我已经尝试将数组转换为Keras HDF5Matrix对象(例如使用X = keras.utils.io_utils.HDF5Matrix(X)),但是当我对其进行切片以进行训练分割时,整个切片(整个数组的80%)将被放入内存,这给我一个MemoryError。
您可以使用模型的fit_generator方法keras。只需编写您自己的生成器类/函数,即可从HDF5文件中提取随机批次的样本。这样,您就不必一次将所有数据存储在内存中。同样,如果您的验证数据太大而无法容纳在内存中,则validation_data参数to fit_generator也将接受根据验证数据生成批处理的生成器。
本质上,您只需要对np.random.shuffle数据集中的索引数组进行处理,然后将随机索引数组拆分为训练,验证和测试数组索引。您的生成器参数fit_generator只会根据训练和验证索引数组中的索引的连续批次从HDF5文件中提取批次。