最近,自己构建了一个卷积神经网络,从网上下载到的数据集是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格式的文件时,肿么办?的更多相关文章

  1. 解析某些特殊格式XML文件时,获取不到根节点问题

    还是在语音识别这块.在读取本地的SRGS的XML后,无法获取到根节点<grammar>. 下面是SRGS.XML文件(只给出了根节点) <?xml version="1.0 ...

  2. 在VMD上可视化hdf5格式的分子轨迹文件

    技术背景 在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件.因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题.现有的比较常见的方式,大 ...

  3. VMD可视化hdf5格式的分子坐标文件

    技术背景 VMD是分子动力学模拟领域常用的一款可视化软件,可以非常直观方便的展示分子的运动过程.而VMD本身对展现的格式有一定的要求,如果不是常见的rst等类型的坐标文件的话,就需要自己手动去实现一个 ...

  4. caffe上使用hdf5格式文件以及回归(regression)问题

    最近用caffe做了一下regression问题,先用data layer中的data,float_data试了一下,data用来存放图片,float_data存放regression的values, ...

  5. 【Python图像特征的音乐序列生成】解析ABC格式的文件(修改版)

    ABC格式,是一个音乐标准,ABC Plus Project最新的标准是2.x. ABC格式的音乐长成这样: X: T:Abacus % Nottingham Music Database S:By ...

  6. od 查看特殊格式的文件内容

    用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制.十六进制和ASCII码来显示文件. 语法: od [选项] 文件- 命令中各选项的含义: - A 指定地址基数 ...

  7. 怎么统计指定文件夹下含有.xml格式的文件数目

    如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...

  8. MySQL如何导出带日期格式的文件

    一网友问在MySQL中如何只用SQL语句导出带日期格式的文件.觉得有点意思,于是尝试了一下.导出文件使用SELECT INTO OUTFILE 但是OUTFILE后面的值不能使用变量,所以只能使用动态 ...

  9. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

    摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...

  10. 如何让Hadoop读取以gz结尾的文本格式的文件

    背景: 搜索引擎在build全量时,会产生数G的xml的中间文件,我需要去查询这些中间文件中,是否有某个特殊的字符.xml文件有很多,每个都有几百M,存储在hdfs上,而且是以gz结尾的文本格式的文件 ...

随机推荐

  1. win10 打开剪切板失败 拒绝访问 已解决!!

    问题 剪切板使用混乱,导致本地无法复制粘贴 解决办法 terminal运行echo off | clip

  2. Maven中的元素Exclusions、modules、parent、properties以及import

    Dependencies:是可选依赖(Optional Dependencies) Exclusions:是依赖排除(Dependency Exclusions) 2.Dependencies (1) ...

  3. Python系统模块os.py和sys.py常用函数

    OS模块 os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os.ge ...

  4. COMMON_FUNC_SPLIT_STRING

    void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& ...

  5. postgresql源码解读

    大量模块源码解读 https://blog.csdn.net/cuichao1900?type=blog 存储管理(内存管理.外存管理)源码解读,每行都有注释 https://blog.csdn.ne ...

  6. 【git】2.1 获取git仓库

    资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%B ...

  7. leetcode -- 旋转矩阵相关问题

    给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...

  8. zerotier的planet服务器(根服务器)-搭建教程

    应用场景介绍: 利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制. 准备工具:  1.服务端:云服务器(有公网IP)Centos 7.6 2.客户端:   工控机(或者家里电脑 ...

  9. 通过xshell在linux上安装nginx1.12.0

    0)环境安装 Nginx是C语言开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 0.1 gcc 安装 安装 nginx 需要先将 ...

  10. android cannot generate view binders android.databinding.tool.util.LoggedErrorException

    错误: Cannot resolve type 'viewModel'错误: cannot generate view binders android.databinding.tool.util.Lo ...