python - 在多个 h5 文件上训练 ANN Keras(基于 Tensorflow)模型
问题描述
我有 600 个文件(每个文件约 400 MB,总计约 235 GB),格式为“h5”的训练数据。所有文件都包含带有数字的数组,其中列数相同,但行数可能不同。
我有加载一个文件并对其进行培训的经验(代码如下所示),但是如何从这么多文件中加载数据,打乱它们并训练模型?
def load_dataset():
"""
simply loading dataset
"""
print("Start time of loading data: " + str(datetime.datetime.now())+"\n\n")
train_dataset = h5py.File('datasets/data.h5', "r")
data = np.array(train_dataset["data"][:])
# Later in the code, "data" will be split into
# X_train and Y_train, e.g. in the comments below
# Split data into X_train and Y_train
# X_train_orig = data[:, :5].reshape(data.shape[0],5)
# Y_train_orig = data[:, -4].reshape(data.shape[0],1)
print("End time of loading data: " + str(datetime.datetime.now())+"\n")
print("Load data: complete\n")
return data
解决方案
如果每个文件中的所有数据点都是独立同分布 (IID) 并且每个文件对所有类都有很好的表示(即没有严重偏向一个类),则加载一个文件,对其内容进行洗牌并对其进行训练,然后继续到下一个文件,很快就会开始。当您完成最后一个文件时,只要验证分数在提高,就重复。
例如 Word2vec 接受过大量数据数据的训练,但从未将完整数据加载到内存中。仅对完整数据的几个时期就可以收敛训练,您的情况也应该如此。
推荐阅读
- c# - URP - Unity 2020.1.15f1 中奇怪的视觉伪影
- android - Android 6.0.1 应用开机后自动启动
- r - ggplot:annotate() 的大小与 element_text() 的大小
- cmd - 在外部 cmd 窗口中运行一个进程,然后在一段时间后退出它
- javascript - NodeJS中的多个SQL查询
- linux - 如何搜索未出现元素的文件?
- bash - Bash增量字符串的长度
- python - 如何根据行号列表将数据框拆分为一些数据框?
- ruby-on-rails - ActiveAdmin:使用过滤器和 AA 约定,但完全控制资源加载和验证
- java - 使用 Gson 将 Java 对象转换为 javax.ws.rs 中的 Json