第三章 Tensorflow进阶

1. 3.1 Tensorflow进阶

ppt page 1:

大家好,接下来给大家讲解一下第3章 TensorFlow进阶,主要有以下几部分内容:

1、  加载数据

2 、 存储和加载模型

3 、评估和优化模型

 

ppt page 2:

本小节的目标是:

1、 掌握Tensorflow加载数据的几种方式

2、 掌握Tensroflow存储和加载模型

3、理解如何评估和优化模型

 

ppt page 3:

在Tensorflow中程序加载数据的方式一共有3种:

1、预加载数据(preloaded data)

2、填充数据(feeding)

3、从文件读取数据(reading from file)

接下来分别介绍这三种方式

 

ppt page 4:

方式一、预加载数据(preloaded data

预加载数据就是在TensorFlow图中定义常量或变量来保存所有数据,例如以下几行代码:

因为常数会直接存储在数据流图数据结构中,所以在训练过程中这个结构体可能会被复制多次,从而导致内存大量消耗。

 

ppt page 5:

方式二、填充数据(feeding

将数据填充到到任一张量中。通过会话的run()函数中的feed_dict参数获取数据,例如如下代码:

这种方式是当数据量大时,填充数据的方式也存在消耗内存的缺点。当然,我们在实际开发过程中,会以分批的形式来填充数据

 

ppt page 6:

方式三、从文件读取数据(reading from file

TensorFlow从文件中读取数据的方式主要有两种,一种是直接从原始文件中读取数据,另一种是将原始文件格式转换为TensorFlow定义的TFRecords格式后再进行读取。

原始文件通常是读取cvs文件,从CSV文件读取数据,首先使用读取器将数据读取到队列中,然后从队列中获取数据进行处理。具体步骤如下:

1、 创建队列

TensorFlow提供了创建队列的方法,如下所示:

 

其中,string_tensor是读取的文件名列表,num_epochs是文件的训练次数,shuffle表示是否对文件进行乱序处理。需要注意的是,返回队列的队列管理器与文件读取器的线程是分开的

2、 创建读取器获取数据

TensorFlow中,针对不同的文件格式,提供了不同的文件读取器。在文件读取器中提供了read()方法,用于获取文件内容和文件的表征值key,从而将内容转换为张量,用于TensorFlow的解析。

3、处理数据

在此对针对获取的数据进行打印输出。需要注意的是,由于队列管理器与文件阅读器的线程是相互独立的,因此需要先启用队列,再使用线程协调器来管理这两个线程

 

ppt page 7:

如下是从CSV文件读取数据代码截图,我们会在本节实操部分详细讲解这段代码

 

ppt page 8:

接下来,介绍一下读取TFRecords数据

在机器学习中,处理的数据都非常巨大,常用的数据读取方式一般都会存在内存占用过高的问题。Tensorflow针对该问题进行了优化,定义了TFRecords格式。

TFRecords是一种二进制文件,能更好地利用内存,更方便地进行复制和移动,并且不需要单独的标记文件,可以使TensorFlow的数据集更容易与网络应用架构相匹配。采用这种方式读取数据分为如下两个步骤:

(1)把样本数据转为TFRecords二进制文件;

(2)读取TFRecords格式。

 

ppt page 9:

以下是生成TFRecords文件关键代码

 

ppt page 10:

以下是读取TFRecords数据关键代码

我们会在本节实操部分详细讲解这段代码

 

ppt page 11:

在机器学习中最关键的就是模型的设计与训练。

存储模型:在模型的设计和训练过程中,会消耗大量的时间。为了降低训练过程中意外情况发生造成的不良影响,我们会对训练过程中模型进行定期存储。

加载模型:为了保证意外中断的模型能够继续训练以及训练完成的模型在其他数据上的直接使用,我们会对存储的模型进行加载使用。

 

ppt page 12:

Tensorflow的模型包括了计算图以及计算过程中的值,主要包括了计算图中所有变量、操作等以及计算过程中的权重、偏差、梯度等值的更新结果。在TensorFlow中,提供了tf.train.Saver类来完成模型的存储。

 

在创建类时,可以指定最多可保留的模型数、训练过程每隔多长时间进行一次自动保存等。

存储的模型,包括了四个相关文件。

这四个文件分别存储训练过程中的不同信息,其中

.meta文件保存TensorFlow计算图的结构信息

data和.index文件存储训练好的参数

 

ppt page 13:

以下是示例代码,我们会在本节实操部分详细讲解这段代码

 

ppt page 14:

加载模型:加载存储好的模型,包括了加载模型和加载训练参数两步。

TensorFlow提供了tf.train.import()相关方法来加载已存储的模型,如import_data_graph()方法,如下:

saver = tf.train.import_meta_graph(‘my_test_model-1000.meta’)

其中my_test_model-1000.meta文件就是已存储的模型文件。

 

加载训练参数:完成计算图的加载后,还需要加载训练过的参数的值,这需要使用restore()方法,如下:

saver.restore(sess,tf.train.latest_checkpoint('./'))

 

ppt page 15:

以下是加载模型示例代码,我们会在本节实操部分详细讲解这段代码

 

ppt page 16:

评估和优化模型

在完成模型的基础设计后,为了让模型能够满足实际的生产需要,需要模型的各种参数进行调整和优化,从以下两方面介绍

1、评估指标介绍与使用

模型的评估主要有几个指标:准确率、识别的时间、loss下降变化等

主要工具:

1.可视化的工具Tensorboard

2.使用Timeline来分析整个模型计算过程中,每个操作所消耗的时间,由此可以有针对性的优化耗时的操作

 

ppt page 17:

模型调优的主要方法

对模型的准确率、识别的时间、loss下降变化等指标的调优主要包括两类操作:一类是调整模型算法,另一类是调整参数和重构代码。对于调整模型算法,我们将在后续章节中详细介绍,本节着重讲解调整参数和重构代码:

调整的参数和代码中需要注意的情形,主要包括以下方面:

1、 调整学习率

学习率是机器学习中最常设定的参数,表示每次学习调整的变化。学习率设置得越大,训练时间就越短,速度就越快,学习率过大,在算法优化的前期会加速学习,使得模型更容易接近局部或全局最优解。但是在后期会有较大波动,甚至出现损失函数的值围绕最小值徘徊,波动很大,始终难以达到最优。而学习率设置得越小,训练的准确度就越高。在训练模型的调优过程中,对于学习率的设置需要不断地进行偿试

2、 优化IO

大家经常接触到的数据读写操作主要有数据预处理、队列以及内存读写等操作。优化IO主要针对这三大数据操作。

1) 在数据预处理阶段,如果数据量比较大,建议在使用TensorFlow官方提供的数据格式TFRecords进行转换后再使用。

2) 在处理数据时,最常使用的就是队列。在实际使用中特别需要注意的是min_after_dequeue值的设置。如果该值太大,会使队列试图在内存中保留大量记录,使内存容易达到饱和,从而触发硬盘的交换功能,降低队列的速度

3) 注意内存的使用,应使整个模型的内存消耗不超出机器内存。如果超出机器内存,必然触发交换功能,从而降低读写速度

3、 优化计算

对于计算的优化,需要根据 实际情况进行处理。主要通过TensorBoard的可视化以及timeline.json文件进行观察,找到耗时的操作,通过优化执行顺序、并行操作等方式进行具体优化。

 

ppt page 18:

本节小结:本章主要讲解了使用TensorFlow进行机器学习过程中的加载训练数据、构建训练模型、进行数据训练、评估和预测四大步骤,重点介绍了这四大步骤中常用的方法和技巧。本节讲到这里,谢谢大家