其他分享
首页 > 其他分享> > 我如何在Keras中训练HDF5文件中存储的数据的神经网络?

我如何在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