我如何在Keras中训练HDF5文件中存储的数据的神经网络?
作者:互联网
我有两个相当大的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.
解决方法:
您可以使用keras模型的fit_generator方法.只需编写您自己的generator类/函数,即可从HDF5文件中提取随机批次的样本.这样,您就不必一次将所有数据存储在内存中.同样,如果您的验证数据太大而无法容纳在内存中,则fit_generator的validation_data参数也会接受一个生成器,该生成器会根据您的验证数据生成批处理.
本质上,您只需要对一组索引数组执行np.random.shuffle到数据集中,然后将随机索引数组拆分为训练,验证和测试数组索引.您针对fit_generator的生成器参数只会根据训练和验证索引数组中的索引的连续批次从HDF5文件中提取批次.
标签:large-data,machine-learning,python 来源: https://codeday.me/bug/20191026/1936388.html