用于机器学习的Python和HDFS

news/2024/7/3 0:18:42

Python平台是MATLAB或Mathematica等封闭源(和昂贵的!)平台的强大替代品。多年来,随着NumPy和SciPy(用于一般科学计算)和TensorFlow,Keras,Theano和PyTorch等平台的积极开发,今天通过Python环境可供所有人使用的功能是惊人的。添加像Jupyter笔记本电脑这样的东西,对于我们大多数人来说,这笔交易是密封的。

就个人而言,我差不多五年前就停止使用MATLAB。MATLAB拥有一系列令人难以置信的软件模块,可用于您可以想象,授予的任何学科,并且Python没有那么大的模块可用(嗯,至少还没有)。但是对于我每天都在进行的深度学习工作,Python平台已经非常出色。

我今天使用了几种工具来学习机器。当我从事网络安全工作时,我倾向于使用pip作为我的模块管理器,并使用虚拟env包装器(使用虚拟env,duh)作为我的环境管理器。对于机器学习,我使用Anaconda。我很欣赏Anaconda,因为它在单一工具中提供模块管理和环境管理。我也会将它用于网络安全工作,但它以科学计算为重点,我使用的许多面向系统的模块都不能通过Anaconda获得,需要通过pip安装。

我还安装了NumPy,scikit-learn,Jupyter,IPython和ipdb。我将这些基本功能用于机器学习项目。我通常会安装一些TensorFlow,Keras或PyTorch的组合,这取决于我正在做什么。我也使用tmux和powerline,但这些不是Python模块(好吧,powerline是,通过powerline-status)。但它们很漂亮,我真的很喜欢它们与IPython的集成方式。最后,我安装了H5py。

H5py是我今天想和你谈谈的。相当多的人不熟悉它,也不熟悉底层数据存储格式HDF5。他们应该是。

Python有自己的全功能数据序列化格式。每个与Python合作过很长时间的人都知道并喜欢pickle文件。它们方便,内置,易于保存和加载。但他们可能很大。而且我并不是说有点大。我的意思是很多千兆字节(兆兆字节?),特别是在使用图像时。我们甚至不考虑视频。

HDF5(分层数据格式5)是最初设计用于大型地理空间数据集的数据存储系统。它是从HDF4发展而来的,HDF4是HDF集团创建的另一种存储格式。它解决了使用pickle文件存储大型数据集的一些显着缺点 - 它不仅有助于控制存储数据集的大小,还消除了负载滞后,并且具有更小的内存占用。

存储大小
HDF5通过H5py为您提供与NumPy和SciPy等存储数据类型相同的灵活性。这为您提供了在指定张量元素大小时非常具体的功能。当您拥有数百万个单独的数据元素时,使用16位或32位数据宽度之间存在相当大的差异。

您还可以在创建和保存数据集时指定压缩算法和选项,包括LZF,LZO,GZIP和SZIP。您也可以指定压缩算法的攻击性。这是一个很大的问题 - 使用稀疏数据集,压缩这些数据集中的元素的能力可以节省大量空间。我通常使用具有最高压缩级别的GZIP,并且您可以节省多少空间。在我最近创建的一个图像数据集上,由于我使用的模型,我被迫使用int64来存储二进制值。压缩允许我消除这些二进制值上几乎所有空的开销,将存档从先前的int8实现中缩小40%(使用字段的整个宽度将二进制值保存为ASCII)。

负载滞后
需要将Pickle文件完全加载到要使用的进程地址空间中。它们是序列化的内存驻留对象,要访问它们需要是内存居民,对吧?HDF5文件只是不关心。

HDF5是一组分层的数据对象(大震,对,因为层次结构是名称中的第一个单词?)。因此,它更像是文件系统而不是单个文件。这个很重要。

因为它更像是文件系统而不是单个数据文件,所以您不需要一次加载文件的所有内容。HDF5和H5py将一个小驱动程序加载到内存中,该驱动程序负责从HDF5数据文件访问数据。这样,您只需加载您需要的内容。如果您曾尝试加载大型pickle文件,那么您知道这是多么重要。您不仅可以快速加载数据,还可以通过舒适的Pythonic数据访问接口(如索引,切片和列表推导)快速访问数据。

数据足迹
无需在每次需要使用时加载所有数据,也可以在运行时内存中提供更小的数据占用空间。当您使用高分辨率真彩色图像训练深度网络时,您的像素深度大约为32位,那么您使用的是大量内存。您需要释放尽可能多的内存来训练您的模型,这样您就可以在几天而不是几周内完成。为了存储数据而留出太字节(或千兆字节)的内存只是浪费资源,使用你不需要的HDF5。

HDF5本质上是一个键/值存储,存储为树。您可以访问数据集或组。数据集也是数据集。组是数据集的集合,您可以通过键访问它们。数据集是存储图中的叶元素,组是内部节点。组可以容纳其他组或数据集; 数据集只能包含数据。组和数据集都可以具有与之关联的任意元数据(再次存储为键值对)。在HDF5中,此元数据称为属性。访问数据集非常简单:

将 h5py 导入为 h5
用 h5。文件('filename.h5','r')为 f:
group = f [ 'images' ]
dataset = group [ 'my dataset' ]
#继续,使用数据集!我赌你!
图1:启用HDF5,Python风格。

H5py是HDF5文件的Python接口,易于使用。它支持现代 with 语义以及传统 open/close 语义。使用属性,您不必依赖命名约定来提供存储数据集的元数据(如图像分辨率,起源或创建时间)。您将该数据作为属性存储在对象本身上。

Python现在经常用于数据分析,包括统计数据分析和机器学习。我们中的许多人也使用本机序列化格式来处理数据。虽然pickle文件易于使用,但在处理大量数据时它们会陷入困境。HDF5是一个专为巨大的地理空间数据集而设计的数据存储系统,可以完美地拾取pickle文件。


http://www.niftyadmin.cn/n/2131954.html

相关文章

linux运行ifconfig未找到命令解决

linux运行ifconfig未找到命令解决 需要安装net-tools工具 yum install net-tools

用ethtool 命令解决Linux 网卡丢包【转】

转自:https://blog.csdn.net/chengxuyuanyonghu/article/details/73739516 生产中有一台Linux设备并发比较大,droped包比较多,尤其是在跑游戏数据包的时候,存在严重的丢包现象,怀疑网卡性能不足,在更换设备…

linux查询实时日志

linux查询实时日志 进入到tomcat logs tail -f catalina.out搜索某一字段,后面是指定文件 grep "解密:" catalina.out

jenkins 发布打包部署springBoot(maven)项目

基于 centos 7 安装jenkins(rpm) wget https://pkg.jenkins.io/redhat-stable/jenkins-2.303.1-1.1.noarch.rpm --no-check-certificaterpm 命令安装 rpm -ivh jenkins-2.303.1-1.1.noarch.rpm如果报错,缺少引用 执行以下命令(如果无,忽略…

区块链2.0:智能合约

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!!区块链2.0是对整个市场的去中心化,利用区块链技术来转换许多不同的资产而不仅仅是比特币,通过转让来创建不同资产单元的价…

构造函数创建私有变量(防继承)

先写一个构造函数 function NumberCount() {this.number 500return {getNumber: ()> {return this.number}}} let n new NumberCount;console.log(n.getNumber()) // 500console.log(n.number) // undefined 这样就创建了函数的私有变量 为什么? 函数对象的定义…

linux下安装 docker

Docker 要求 CentOS 系统的内核版本高于 3.10,通过 uname -r 命令查看你当前的内核版本: uname -r2.使用 root 权限登录 ,确保 yum 包更新到最新 sudo yum update3.卸载旧版本(如果无,则忽略) sudo yum remove docker docker-co…

【译】 WebSocket 协议第七章——关闭连接(Closing the Connection)

概述 本文为 WebSocket 协议的第七章,本文翻译的主要内容为 WebSocket 连接关闭相关内容。 关闭连接(协议正文) 7.1 定义 7.1.1 关闭 WebSocket 连接 要关闭 WebSocket 连接,终端需要关闭底层的 TCP 连接。终端需要使用一个方法来…