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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文将介绍如何将数据转化为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的端口。完整代码的地址是https://github.com/cheyang/mnist-examples/blob/master/convert_to_records.py

# 定义函数转化变量类型。
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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
50 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
3月前
|
TensorFlow 算法框架/工具
tensorflow/train训练指令
tensorflow/train训练指令
35 0
|
3月前
|
机器学习/深度学习 算法 TensorFlow
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
52 0
|
1月前
|
机器学习/深度学习 人工智能 API
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
23 0
|
2月前
|
存储 分布式计算 Java
HDFS的数据读取流程是怎样的?请描述数据读取的过程。
HDFS的数据读取流程是怎样的?请描述数据读取的过程。
21 0
|
2月前
|
Java API
HDFS的数据写入流程是怎样的?请描述数据写入的过程。
HDFS的数据写入流程是怎样的?请描述数据写入的过程。
15 0
|
3月前
|
机器学习/深度学习 数据可视化 TensorFlow
用TensorBoard可视化tensorflow神经网络模型结构与训练过程的方法
用TensorBoard可视化tensorflow神经网络模型结构与训练过程的方法
113 0
|
3月前
|
存储 Linux
[hadoop3.x]HDFS之银行海量转账数据分层案例(八)
[hadoop3.x]HDFS之银行海量转账数据分层案例(八)
106 1
|
3月前
|
机器学习/深度学习 存储 TensorFlow
Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
68 0
|
4月前
|
机器学习/深度学习 TensorFlow API
学习 TensorFlow:构建和训练机器学习模型的利器
学习 TensorFlow:构建和训练机器学习模型的利器

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版