利用TFRecord和HDFS准备TensorFlow训练数据

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本文将介绍如何将数据转化为TFRecord格式,并且将生成TFRecord文件保存到HDFS中, 这里我们直接使用的是阿里云EMR(E-MapReduce)的HDFS服务。

本系列将利用阿里云容器服务的机器学习解决方案,帮助您了解和掌握TensorFlow,MXNet等深度学习库,开启您的深度学习之旅。

tensorflow-hdfs.jpg

数据准备和预处理是一个深度学习训练过程中扮演着非常重要的角色,它影响着模型训练的速度和质量。

而TensorFlow对于HDFS的支持,将大数据与深度学习相集成,完善了从数据准备到模型训练的完整链条。在阿里云容器服务深度学习解决方案中, 为TensoFlow提供了OSS,NAS和HDFS三种分布式存储后端的支持。

本文将介绍如何将数据转化为TFRecord格式,并且将生成TFRecord文件保存到HDFS中, 这里我们直接使用的是阿里云EMR(E-MapReduce)的HDFS服务。

创建EMR集群

阿里云 Elastic MapReduce(E-MapReduce) 是运行在阿里云平台上的一种大数据处理的系统解决方案。可以通过访问EMR介绍了解其中细节。

具体EMR集群创建过程,可以参考文档,创建过程中,请选择VPC下的EMR,请留意EMR对应的安全组名。

创建容器集群,并且打通两个集群间的网络。

同一个VPC 下创建GPU容器集群后,登录到EMR集群对应的安全组,点击管理实例将容器集群的节点添加进来。

为什么要使用TFRecord

TFRecord是TensorFlow内定的统一标准数据格式,可以支持多线程数据读取,并且可以通过batch size和epoch参数来控制训练时单次batch的大小和样本文件迭次数,同时能更好的利用内存和方便数据的复制和移动,所以是利用TensorFlow进行大规模深度学习训练的首选。

TFRecord生成程序示例

这段缩减的代码将MNIST数据集中所有的训练数据存储到一个TFRecord文件中,并且保存到EMR的HDFS中:hdfs://192.168.100.206:9000/mnist/output.tfrecords, 192.168.100.206是EMR的Master IP地址,9000是HDFS NameNode的端口。

# 定义函数转化变量类型。
def _int64_feature(value):
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

# 读取mnist数据。
mnist = input_data.read_data_sets("./MNIST_data",dtype=tf.uint8, one_hot=True)
images = mnist.train.images
labels = mnist.train.labels
pixels = images.shape[1]
num_examples = mnist.train.num_examples

# 保存TFRecord到HDFS。
filename = "hdfs://192.168.100.206:9000/mnist/output.tfrecords"
writer = tf.python_io.TFRecordWriter(filename)
for index in range(num_examples):
    image_raw = images[index].tostring()

    example = tf.train.Example(features=tf.train.Features(feature={
        'pixels': _int64_feature(pixels),
        'label': _int64_feature(np.argmax(labels[index])),
        'image_raw': _bytes_feature(image_raw)
    }))
    writer.write(example.SerializeToString())
writer.close()
注意:TensoFlow虽然支持HDFS,但是需要额外的配置,否则直接调用会报 Environment variable HADOOP_HDFS_HOME not set。如果在容器服务的深度学习解决方案中,您就无需为此劳心。

生成TFRecord数据

可以利用模型训练服务提供运行环境执行convert_to_records.py, 生成TFRecord数据,保存到HDFS中

这样,就可以看到一个表单。首先通过下拉框选择刚才创建的集群名称,点击训练框架 ,这时可以看到一系列深度学习框架的列表,其中包括TensorFlow, Keras和MXNet的不同版本, 还可以指定python2和python3的版本,这里选择tensorflow:1.0.0,并且配置其他选项,点击确定

以下为具体配置:

运行成功后,可以查看执行的日志, 显示TFRecord文件已经保存到了HDFS

登录到EMR机器上查看产生的TFRecord文件

# hdfs dfs -ls /mnist-tfrecord
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/tez-0.8.4/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Found 3 items
-rw-r--r--   3 root hadoop    8910000 2017-05-23 19:34 /mnist-tfrecord/test.tfrecords
-rw-r--r--   3 root hadoop   49005000 2017-05-23 19:33 /mnist-tfrecord/train.tfrecords
-rw-r--r--   3 root hadoop    4455000 2017-05-23 19:33 /mnist-tfrecord/validation.tfrecords

总结

数据准备是深度学习中非常重要的一环,而TensorFlow通过与Hadoop/Spark生态的集成,打通了大数据和深度学习之间关联。在阿里云的深度学习解决方案里,你能够很方便的使用OSS,NAS和HDFS等分布式存储保存和管理数据和模型。我们将在下一篇文章中向您介绍如何利用阿里云容器服务的深度学习解决方案在HDFS中加载TFRecord进行模型训练并保存Check point以及模型。

欢迎扫码加入钉钉群一起讨论:

code_1.jpg

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
29天前
|
并行计算 Shell TensorFlow
Tensorflow-GPU训练MTCNN出现错误-Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
在使用TensorFlow-GPU训练MTCNN时,如果遇到“Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED”错误,通常是由于TensorFlow、CUDA和cuDNN版本不兼容或显存分配问题导致的,可以通过安装匹配的版本或在代码中设置动态显存分配来解决。
47 1
Tensorflow-GPU训练MTCNN出现错误-Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
|
27天前
|
数据采集 TensorFlow 算法框架/工具
【大作业-03】手把手教你用tensorflow2.3训练自己的分类数据集
本教程详细介绍了如何使用TensorFlow 2.3训练自定义图像分类数据集,涵盖数据集收集、整理、划分及模型训练与测试全过程。提供完整代码示例及图形界面应用开发指导,适合初学者快速上手。[教程链接](https://www.bilibili.com/video/BV1rX4y1A7N8/),配套视频更易理解。
33 0
【大作业-03】手把手教你用tensorflow2.3训练自己的分类数据集
|
2月前
|
数据挖掘 PyTorch TensorFlow
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
32 4
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
32 2
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
79 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
35 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
44 0
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
42 5
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
61 0