我有两个相当大的PyTables耳环,其中包含回归任务的输入和标签。输入数组是4d(55k x 128 x 128 x 3),标签数组是1d(55k)。在这个架构中,我想有两个问题。在
如何根据训练/测试索引选择HDF5数组的子集(输入和输出),并在训练子集上进行训练,而不需要一次将它们读入内存?有没有什么方法可以创建磁盘阵列的“视图”,它可以被切片,并且Keras会将其视为常规的NumPy ndarray?在
到目前为止,我尝试的是将数组转换为Keras HDF5Matrix对象(例如X = keras.utils.io_utils.HDF5Matrix(X)
),但是当我将其切片以获得训练分割时,整个切片(整个数组的80%)被放入内存中,这给了我一个MemoryError
。在
您可以使用
keras
模型的fit_generator方法。只需编写您自己的generator类/函数,从HDF5文件中随机抽取一批样本。这样,您就不必同时将所有数据存储在内存中。类似地,如果验证数据太大而无法放入内存中,validation_data
参数也接受从验证数据生成批的生成器。在本质上,您只需要对数据集中的索引数组执行
np.random.shuffle
,然后将随机索引数组拆分为训练、验证和测试数组索引。fit_generator
的生成器参数将根据训练和验证索引数组中的顺序索引批从HDF5文件中提取批。在相关问题 更多 >
编程相关推荐