如何在Keras中训练存储在HDF5文件中的神经网络?

2024-05-03 11:03:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个相当大的PyTables耳环,其中包含回归任务的输入和标签。输入数组是4d(55k x 128 x 128 x 3),标签数组是1d(55k)。在这个架构中,我想有两个问题。在

  1. 输入数组至少太大,无法同时放入内存中。在
  2. 我只想对完整数据的一些随机子集进行训练,因为我想进行训练、测试和验证拆分。我通过对指数的随机子集进行切片来选择拆分。在

如何根据训练/测试索引选择HDF5数组的子集(输入和输出),并在训练子集上进行训练,而不需要一次将它们读入内存?有没有什么方法可以创建磁盘阵列的“视图”,它可以被切片,并且Keras会将其视为常规的NumPy ndarray?在

到目前为止,我尝试的是将数组转换为Keras HDF5Matrix对象(例如X = keras.utils.io_utils.HDF5Matrix(X)),但是当我将其切片以获得训练分割时,整个切片(整个数组的80%)被放入内存中,这给了我一个MemoryError。在


Tags: 数据方法内存架构切片utils标签数组
1条回答
网友
1楼 · 发布于 2024-05-03 11:03:42

您可以使用keras模型的fit_generator方法。只需编写您自己的generator类/函数,从HDF5文件中随机抽取一批样本。这样,您就不必同时将所有数据存储在内存中。类似地,如果验证数据太大而无法放入内存中,validation_data参数也接受从验证数据生成批的生成器。在

本质上,您只需要对数据集中的索引数组执行np.random.shuffle,然后将随机索引数组拆分为训练、验证和测试数组索引。fit_generator的生成器参数将根据训练和验证索引数组中的顺序索引批从HDF5文件中提取批。在

相关问题 更多 >