当你的数据集是hdf5格式的文件时,肿么办?
最近,自己构建了一个卷积神经网络,从网上下载到的数据集是hdf5格式的,希望用这个数据集来训练一下自己构建的这个神经网络。
1. 什么是hdf5?
HDF5是二进制数据格式,用于在磁盘上存储巨大的数值数据集(数据太大无法存储在内存中),同时便于对数据集的行进行遍历和计算。HDF5中的数据是分层存储的,类似于文件系统存储数据的方式。它可以存储两类数据对象;
1.dataset:类比于文件系统中的文件,可以操作list/ndarray的方式老操作它
2.group:类比于文件系统的文件夹,可以用操作dict的方式来操作它
数据是定义在group中,group类似层次容器的结构,可以包含零个或多个group或dataset的实例,以及支持元数据(metadata)。一旦定义了一个group,就可以在group中创建一个dataset。dataset可以理解为是一个多维数组(例如一个NumPy数组),注意:同一个多维数组中数据类型是相同的(整数、浮点数、unicode等)。图3.2显示了一个包含具有多个dataset的group的HDF5文件示例。本文我们将编写一个定制的Python类,使我们能够有效地接受输入数据并将其写入HDF5数据集。
图3.2
HDF5是用C编写的,但是,通过使用h5py模块(h5py.org),我们可以使用Python编程语言访问底层的C语言API。h5py之所以如此出色,是因为它易于与数据交互。我们可以在HDF5数据集中存储大量数据,并以类似于numpy的方式操作数据。例如,我们可以使用标准的Python语法访问和分割存储在磁盘上的tb级别数据集中的行,像加载到内存中操作一样简单。由于特殊的数据结构,这些分片和行访问速度非常快。当使用HDF5和h5py时,你可以将数据看作一个巨大的NumPy数组,虽然数据太大无法加载到内存中,但是仍然可以像在内存一样的访问和操作数据。
这个标准库最主要的一点在于开发者对它的积极维护以及在向下兼容方面花费的巨大精力。标准库的向下兼容不仅仅是API的兼容,亦包括文件格式的兼容,这意味着以HDF5格式存储的数据集本质上是可移植性的,可以被使用不同编程语言(如C、MATLAB和Java)的其他开发人员访问。
2. 如何使用hdf5?
上面我们已经知道了什么是hdf5文件以及他需要用h5py库来处理,但是,如何把数据送到神经网络中训练呢?
data_path = ""
import h5py
with h5py.File("{}".format(data_path),"r") as f:
col_list = []
f.visit(col_list.append)
print("{}文件的group包括:{}\n".format(data_path, col_list))
for i in col_list:
data_i = f["{}".format(i)]
此时,我们已经将hdf5文件中的各个group用不同的变量保存起来,那么下来该怎么做呢?本人没有理解hdf5文件的精髓(由于数据太大的情况下,电脑无法同时将数据加载到电脑的运行内存上,所以出现了hdf5文件来解决这个问题),把提取出的各个group写到了txt文件中,结果原本5G左右的数据一下飙升到30G左右,因此,我们需要直接将该文件递交给深度神经网络来训练。上述代码说明了如何访问以及提取各个group接下来说说如何使用。
# 上面的操作形式让我们想起了使用open()函数对txt文件的操作,没错,我们还可以用另外一种形式对文件进行操作,这种方法在jupyter notebook环境中更是棒棒的
hdf5_file = h5py.File("{}".format(data_path),"r")
col_list = []
hdf5_file.visit(col_list.append)
print("{}文件的group包括:{}\n".format(data_path, col_list))
for i in col_list:
data_i = hdf5_file["{}".format(i)]
# 假设该hdf5文件中含有的group有"X"、"Y",且"X"表示训练数据,"Y"表示标签
# 使用zip()函数将二者合在一起,用于训练集、测试集的划分,或许还有别的办法,希望读者能够提供
data = list(zip(data_X,data_Y))
from sklearn.model_selection import train_test_split
train,test = train_test_spilt(data)
x_train,y_train = zip(*train)
x_test,y_test = zip(*test)
# 理论上上述命令操作之后已经构建成功了训练集、测试集,但是当把他们导入模型时,出了问题
# 报错:TypeError:Error when checking input data: it should be numpy array, or list/dict.Found:(array(****************))
# 大致是这么个意思,由于之前的问题解决了,搜索的网页没有保留
# 该问题的主要原因是经过zip操作之后,将原来的array格式的数据变成了元组形式,我们主要把他们变回去就好了
x_train_lst = list(x_train)
y_train_lst = list(y_train)
x_test_lst = list(x_test)
y_test_lst = list(y_test)
# 这样就可以了,可以把他们送入模型中
from keras.models import Model
from keras.layers import Input
# 最简单的模型
input = Input((max_len,))
output = Dense()(input)
model = Model(inputs=input, outputs=output)
model.compile(optimizer="adam",loss="MSE",metrics=["accuracy"])
history = model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
callbacks=my_callbacks,
validation_data=(x_test, y_test))
# 完成,关闭hdf5文件
hdf5_file.close()
对于keras构建模型,可以看这篇文章,keras构建1D卷积神经网络
当你的数据集是hdf5格式的文件时,肿么办?的更多相关文章
- 解析某些特殊格式XML文件时,获取不到根节点问题
还是在语音识别这块.在读取本地的SRGS的XML后,无法获取到根节点<grammar>. 下面是SRGS.XML文件(只给出了根节点) <?xml version="1.0 ...
- 在VMD上可视化hdf5格式的分子轨迹文件
技术背景 在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件.因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题.现有的比较常见的方式,大 ...
- VMD可视化hdf5格式的分子坐标文件
技术背景 VMD是分子动力学模拟领域常用的一款可视化软件,可以非常直观方便的展示分子的运动过程.而VMD本身对展现的格式有一定的要求,如果不是常见的rst等类型的坐标文件的话,就需要自己手动去实现一个 ...
- caffe上使用hdf5格式文件以及回归(regression)问题
最近用caffe做了一下regression问题,先用data layer中的data,float_data试了一下,data用来存放图片,float_data存放regression的values, ...
- 【Python图像特征的音乐序列生成】解析ABC格式的文件(修改版)
ABC格式,是一个音乐标准,ABC Plus Project最新的标准是2.x. ABC格式的音乐长成这样: X: T:Abacus % Nottingham Music Database S:By ...
- od 查看特殊格式的文件内容
用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制.十六进制和ASCII码来显示文件. 语法: od [选项] 文件- 命令中各选项的含义: - A 指定地址基数 ...
- 怎么统计指定文件夹下含有.xml格式的文件数目
如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...
- MySQL如何导出带日期格式的文件
一网友问在MySQL中如何只用SQL语句导出带日期格式的文件.觉得有点意思,于是尝试了一下.导出文件使用SELECT INTO OUTFILE 但是OUTFILE后面的值不能使用变量,所以只能使用动态 ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- 如何让Hadoop读取以gz结尾的文本格式的文件
背景: 搜索引擎在build全量时,会产生数G的xml的中间文件,我需要去查询这些中间文件中,是否有某个特殊的字符.xml文件有很多,每个都有几百M,存储在hdfs上,而且是以gz结尾的文本格式的文件 ...
随机推荐
- 文本超出换行添加white-space:wrap无效
场景描述: 在vue项目中,在Modal弹窗里面使用Form表单组件,然后在FormItem里面放一个div标签用来装文字内容.有时会出现内容超出Form表单宽度但是不换行的问题. 解决方法: 给di ...
- 动手学强化学习 第二章 多臂tiger机问题 阅读笔记
第二章 多臂tiger机问题 第一节 简介 强化学习是一种试错型学习范式. 第二节 问题介绍 多臂tiger机(multi-armed bandit,MAB)不存在状态信息,只有动作和奖励.有一个拥有 ...
- 监听异常:The listener supports no services
数据库版本:单机环境19c 实例是正常的 [oracle@sit19c admin]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Produ ...
- 从零搭建hadoop集群之安装虚拟机
1. 打开 VMware 2. 点击编辑 -> 虚拟网络编辑器 点击VMnet8 选中NAT模式(于虚拟机共享主机的ip地址) 设置子网IP 点击NAT设置 3. 设置网关 :和子网IP ...
- Fortran 笔记之 继承和聚合
继承(类扩展)和聚合 参考自Introduction to Modern Fortran for the Earth System Sciences 我们在3.3部分的开头提到过,OOP范式通常会导致 ...
- Error building Player because scripts had compiler errors
报错信息如下: Error building Player because scripts had compiler errors Build completed with a result of ' ...
- docker-compose 搭建 redis 集群
准备配置文件 bind 0.0.0.0 # redis端口 port ${PORT} requirepass redispwd # 关闭保护模式 protected-mode no # 开启集群 cl ...
- ubuntu 铺满桌面 调整字体 安装firefox中文版
ubuntu 铺满桌面 安装 open-vm-tools sudo apt-get install open-vm-tools sudo apt-get install open-vm* . rebo ...
- GSLB工作原理
参考文档: http://chongit.github.io/2015/04/15/GSLB%E6%A6%82%E8%A6%81%E5%92%8C%E5%AE%9E%E7%8E%B0%E5%8E%9F ...
- node_modules/canvas npm ERR! command failed
Installing packages. This might take a couple of minutes.Installing react, react-dom, and react-scri ...