人工智能模型是这样构建的!探秘DL4J分布式训练法!

人工智能的英文全名为Artificial Intelligence,我们通常简称为AI。广义上讲,AI可以指任何能够从事某种智能活动的计算机程序。

近年来深度学习在AI领域表现尤为突出,在这里我们可以简单的把AI理解为深度学习。

深度学习由深层神经网络算法构成,大量的神经元输入通过不断的迭代更新参数完成模型定型。深度学习的计算强度较高,对于规模非常大的数据集而言,速度很重要。主流的深度学习框架有TensorFlow、Caffe、Keras、Theano等,它们大多在单节点服务器通过GPU加速完成模型训练。随着大数据时代的来临,采用分布式计算极大提高了计算性能。因此将分布式计算与深度学习结合成为必然趋势。 DL4J就是基于这样的思想诞生的,是应用最广泛的JVM开源深度学习框架,它可以利用Spark在多台服务器多个GPU上开展分布式的深度学习模型训练,让模型跑得再快一点。

运用Deeplearning4J高效的训练一个完整神经网络模型包括:神经网络输入数据ETL、配置神经网络结构、设置参数监测可视化界面、模型训练、模型评估、模型保存与加载。本期“安仔课堂”,ISEC实验室的老师为大家详解如何运用DL4J构建AI模型。

人工智能模型是这样构建的!探秘DL4J分布式训练法!

一、数据ETL

神经网络所能识别的输入数据是向量,训练中涉及大量的矩阵运算。ND4J是神经网络训练进行必要的线性代数和微积分运算的科学计算库,让Java能够访问所需的原生库,能够使用多个CPU或GPU快速处理矩阵数据。DataVec是基于ND4J之上的一个工具包,通过它可以方便的对数据摄取、清理、联接、缩放、标准化和转换等处理,快速的将图像、视频、声音、文本和时间序列等原始数据转变为特征向量,输入神经网络。示例如下:

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图1

二、配置网络结构

MultiLayerConfiguration是用来设定网络的层及其超参数。超参数是决定神经网络学习方式的变量,包括模型的权重更新次数、如何初始化权重、为节点添加哪些激活函数、使用哪些优化算法以及模型的学习速度,通过调用layer添加网络层,指定其在所有层中的先后位置、输入及输出节点数nIn和nOut。网络配置的示例如下:

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图2

三、模型训练

DL4J能够依靠Spark来实现数据并行,以并行方式训练模型,对这些模型产生的参数进行迭代式平均化,得到一个中央模型。首先创建一个TrainingMaster实例,指定分布式训练的实际开展方式,然后用网络配置和TrainingMaster对象创建SparkDl4jMultiLayer实例,最后SparkDl4jMultiLayer实例调用fit方法传入数据进行模型训练。

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图3

四、设置可视化界面

用户界面可以在浏览器中对网络状态以及定型参数进行可视化。该用户界面通常用于调试神经网络,亦即通过选择合适的超参数来提高网络性能。在配合Spark使用时可以分两个步骤,首先收集并保存相关统计数据,随后再进行可视化:

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图4

之后可以用如下代码加载并显示已保存的信息:

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图5

五、模型评估

模型训练完成后通常需要用一定数量的测试集来测试模型效果,这里可以直接调用doEvaluation方法对测试数据集进行模型测试,调用evaluation.stats()可以输出测试信息。

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图6

输出结果:

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图7

输出结果信息说明:

Accuracy(准确率):模型准确识别出的数量占总数的百份比;

Precision(精确率):真正例的数量除以真正例与假正例的数之和;

Recall(召回率):真正例的数量除以真正例与假负例数之和;

F1 Score(F1值):精确率和召回率的加权平均值。

六、模型保存与加载

模型训练完成后需要将模型保存以供模型加载部署。ModelSerializer是用于加载和保存模型的类。

人工智能模型是这样构建的!探秘DL4J分布式训练法!

图8

以上步骤完整的完成了一个基于DL4J深度学习的建模方式,我们可将代码打包提交到Spark集群运行。该模型可以在分布式环境中利用GPU实现高效运算,提升模型训练效率。


分享到:


相關文章: