`
骑猪逛街666
  • 浏览: 141505 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spark与深度学习框架——H2O、deeplearning4j、SparkNet

阅读更多
阅读原文请点击:http://click.aliyun.com/m/23851/
摘要: 引言:你可能对使用Spark服务比较感兴趣。Spark已经提供了很多功能,也有一个好用的界面,而且背后有强大的社区,开发者十分活跃,这也是人们对Spark寄予厚望的原因。深度学习是当前正在进行中的Spark项目之一。

引言:你可能对使用Spark服务比较感兴趣。Spark已经提供了很多功能,也有一个好用的界面,而且背后有强大的社区,开发者十分活跃,这也是人们对Spark寄予厚望的原因。深度学习是当前正在进行中的Spark项目之一。本文我们将介绍一些Spark能用的深度学习框架。
本文选自《Spark:大数据集群计算的生产实践》。
  深度学习因其高准确率及通用性,成为机器学习中最受关注的领域。这种算法在2011—2012年期间出现,并超过了很多竞争对手。最开始,深度学习在音频及图像识别方面取得了成功。此外,像机器翻译之类的自然语言处理或者画图也能使用深度学习算法来完成。深度学习是自1980年以来就开始被使用的一种神经网络。神经网络被看作能进行普适近似(universal approximation)的一种机器。换句话说,这种网络能模仿任何其他函数。例如,深度学习算法能创建一个识别动物图片的函数:给一张动物的图片,它能分辨出图片上的动物是一只猫还是一只狗。深度学习可以看作是组合了许多神经网络的一种深度结构。
  与其他已有的机器学习算法相比,深度学习需要大量参数及训练数据。这也是我们介绍能在Spark上运行的深度学习框架的原因。要想在企业环境中稳定地进行深度学习的训练,必须要有一个可靠而快速的分布式引擎。
  Spark被视为目前最适合运行深度学习算法的平台,是因为:

基于内存的处理架构对于使用机器学习的迭代计算,特别是深度学习,十分适合。
Spark的几个生态系统如MLlib及Tachyon对于开发深度学习模型很有用。
本文我们将介绍一些Spark能用的深度学习框架。这些框架和深度学习一样,都是比较新的库。很可能你在使用它们的过程中遇到一些bug或者缺少一些操作工具,但是报告问题(issue)及发送补丁将会使它更加成熟。

H2O
  H2O是用h2o.ai开发的具有可扩展性的机器学习框架,它不限于深度学习。H2O支持许多API(例如,R、Python、Scala和Java)。当然它是开源软件,所以要研究它的代码及算法也很容易。H2O框架支持所有常见的数据库及文件类型,可以轻松将模型导出为各种类型的存储。深度学习算法是在另一个叫作sparkling-water的库中实现的(http://h2o.ai/product/sparkling-water/)。它主要由h2o.ai开发。要运行sparkling-water,需要使用Spark 1.3或以上的版本。

安装
1.首先需要从h2o网站下载最新的sparking-water。
(http://h2o-release.s3.amazonaws.com/sparkling-water/rel-1.3/1/index.html)
2.把它指向Spark的安装目录。

$ export Spark_HOME=/path/to/your/spark
3.启动sparkling-shell,这个接口与spark-shell类似。

$ cd ~/Downloads
$ unzip Sparkling-water-1.3.1.zip
$ cd Sparkling-water-1.3.1
$ bin/Sparkling-shell
  sparkling-water源码中包含几个例子。不幸的是,有些例子在Spark 1.5.2版本上无法正常运行。深度学习的demo也有相同的问题。你得等待这些问题被解决,或者自己写几个能在Spark运行的补丁。

deeplearning4j
  deeplearning4j是由Skymind开发的,Skymind是一家致力于为企业进行商业化深度学习的公司。deeplearning4j框架是创建来在Hadoop及Spark上运行的。这个设计用于商业环境而不是许多深度学习框架及库目前所大量应用的研究领域。Skymind是主要的支持者,但deeplearning4j是开源软件,因此也欢迎大家提交补丁。deeplearning4j框架中实现了如下算法:

受限玻尔兹曼机(Restricted Boltzmann Machine)
卷积神经网络(Convolutional Neural Network)
循环神经网络(Recurrent Neural Network)
递归自编码器(Recursive Autoencoder)
深度信念网络(Deep-Belief Network)
深度自编码器(Deep Autoencoder)
栈式降噪自编码(Stacked Denoising Autoencoder)
这里要注意的是,这些模型能在细粒度级别进行配置。你可以设置隐藏的层数、每个神经元的激活函数以及迭代的次数。deeplearning4j提供了不同种类的网络实现及灵活的模型参数。Skymind也开发了许多工具,对于更稳定地运行机器学习算法很有帮助。下面列出了其中的一些工具。

Canova (https://github.com/deeplearning4j/Canoba)是一个向量库。机器学习算法能以向量格式处理所有数据。所有的图片、音频及文本数据必须用某种方法转换为向量。虽然训练机器学习模型是十分常见的工作,但它会重新造轮子还会引起bug。Canova能为你做这种转换。Canova当前支持的输入数据格式为:
-- CSV
--原始文本格式(推文、文档)
--图像(图片、图画)
--定制文件格式(例如MNIST)

由于Canova主要是用Java编写的,所以它能运行在所有的JVM平台上。因此,可以在Spark集群上使用它。即使你不做机器学习,Canova对你的机器学习任务可能也会有所裨益。
nd4j(https://github.com/deeplearning4j/nd4j)**有点像是一个numpy,Python中的SciPy工具。**此工具提供了线性代数、向量计算及操纵之类的科学计算。它也是用Java编写的。你可以根据自己的使用场景来搭配使用这些工具。需要注意的一点是,nd4j支持GPU功能。由于现代计算硬件还在不断发展,有望达到更快速的计算。
dl4j-spark-ml (https://github.com/deeplearning4j/dl4j-spark-ml)**是一个Spark包,使你能在Spark上轻松运行deeplearning4j。**使用这个包,就能轻松在Spark上集成deeplearning4j,因为它已经被上传到了Spark包的公共代码库(http://spark-packages.org/package/deeplearning4j/dl4j-Spark-ml)。
因此,如果你要在Spark上使用deeplearning4j,我们推荐通过dl4j-spark-ml包来实现。与往常一样,必须下载或自己编译Spark源码。这里对Spark版本没有特别要求,就算使用最早的版本也可以。deeplearning4j项目准备了样例存储库。要在Spark上使用deeplearning4j,dl4j-Spark-ml-examples是可参考的最佳示例(https:// github.com/deeplearning4j/dl4j-Spark-ml-examples)。下面列出如何下载及编译这个代码库。

$ git clone git@github.com:deeplearning4j/dl4j-spark-mlexamples.git
$ cd dl4j-Spark-ml-examples
$ mvn clean package -DSpark.version=1.5.2 \
                      -DHadoop.version=2.6.0
  编译类位于target目录下,但是可以通过bin/run-example脚本运行这些例子。当前有三种类型的例子:

ml.JavaIrisClassfication——鸢尾花(iris flower)数据集分类。
ml.JavaLfwClassfication——LFW人脸数据库分类。
ml.JavaMnistClassfication——MNIST手写数据分类。
我们选择第3个例子,对MNIST手写数据集运行分类模型的训练。在运行这个示例之前,需要从MNIST站点下载训练数据(http://yann.lecun.com/exdb/ mnist/)。或者,你可以使用下面的命令下载:

## 下载手写数据的图像
$ wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
$ gunzip train-images-idx3-ubyte
## 下载与上述图像对应的标签
$ wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
$ gunzip train-labels-idx1-ubyte
And the put the two files on data direcotry under dj4j-spark-ml-examples.
$ mv train-images-idx3-ubyte \
            /path/to/dl4j-spark-ml-examples/data
$ mv train-labels-idx1-ubyte \
            /path/to/dj4j-spark-ml-examples/data
  差不多可以开始运行训练进程了。你需要注意的最后一点是Spark executor及driver的内存大小,因为 MNIST数据集和它的训练模型将会很大。它们要用到大量内存,因此我们建议你提前修改bin/run-example脚本中设置的内存大小。可以通过如下命令修改bin/run-example脚本的最后一行:

exec spark-submit \
        --packages "deeplearning4j:dl4j-spark-ml:0.4-rc0" \
        --master $EXAMPLE_MASTER \
        --class $EXAMPLE_CLASS \
        --driver-memory 8G \    # <- Changed from 1G
        --executor-memory 8G \  # <- Changed from 4G
        "$SPARK_EXAMPLES_JAR" \
        "$@"
  现在开始训练:

$ MASTER=local[4] bin/run-example ml.JavaMnistClassfication
  为了指定本地Spark的master配置,我们已经在bin/run-example脚本的前面设置了MASTER环境变量。这种训练需要花一些时间,由你的环境及机器规格决定。这个例子运行了一种叫作“卷积神经网络”的神经网络。其参数细节是通过MultiLayerConfiguration类设置的。由于deeplearning4j有一个Java接口,就算你不习惯Spark的Scala语言也没关系,它是很容易引入的。下面简单解释一下这个例子中的卷积神经网络参数。

seed——此神经网络会使用像初始网络参数这样的随机参数,这个种子就用于产生这些参数。有了这个种子参数,在开发机器学习模型的过程中更容易进行测试与调试。 batchSize——像递度下降之类的迭代算法,在更新模型之前会汇总一些更新值,batchSize指定进行更新值计算的样本数。
iterations——由一个迭代进程保持模型参数的更新。这个参数决定了此迭代处理的次数。通常来说,迭代越长,收敛的概率越高。
optimizationAlgo——运行前述的迭代进程,必须用到几种方法。随机梯度下降(Stochastic Gradient Descent,SGD)是目前为止最先进的方法,这种方法相对来讲不会落入局部最小值,还能持续搜索全局最小值。
layer——它是深度学习算法的核心配置。这个深度学习神经网络有几个名为layer的网络组。这个参数决定了在每一层中使用哪种类型的层。例如,在卷积神经网络的案例中,ConvolutionLayer被用于从输入的图像中提取出特征。这个层能学习一个给定的图片有哪种类型的特征。在一开始就放置这个层,将改善整个神经网络预测的精确性。每个层也能用给定的参数进行配置。 new ConvolutionLayer.Builder(10, 10) .nIn(nChannels) // 输入元素的数目 .nOut(6) // 输出元素的数目 .weightInit(WeightInit.DISTRIBUTION) // 参数矩阵的初始化方法 .activation("sigmoid") // 激活函数的类型 *build())             图片描述
  上图展现了神经网络的通用结构。由于ConvolutionalLayer也是一种神经网络,两种网络的部件基本上是相同的。神经网络有一个输入(x)及输出(y)。它们都是向量格式的数据。在上图中,输入为一个四维向量,而输出也是一个四维向量。输出向量y是怎样计算出来的呢?每层都有一个参数矩阵。在本例中,它们用W表示。x与W相乘得到下一个向量。为了增强这个模型的表达,这个向量被传给某个非线性激活函数(σ),例如逻辑sigmoid函数(logistic sigmoid function)、Softmax函数。使用这个非线性函数,神经网络就能逼近任意类型的函数。然后用z与另一个参数矩阵W相乘,并再次应用激活函数σ 。
阅读原文请点击:http://click.aliyun.com/m/23851/
分享到:
评论

相关推荐

    SparkNet:用于Spark的分布式神经网络

    星火网用于Spark的分布式神经网络。... 通过运行在EC2上启动一个由5个工人组成的Spark集群 SparkNet/ec2/spark-ec2 --key-pair=key \ --identity-file=key.pem \ --region=eu-west-1 \ --zone=eu-west-1c \ --instan

    SparkNet:尝试使用numpy作为其主要后端构建我自己的深度学习库

    SparkNet是一个基于Python的小型深度学习库,设计用于学习和理解深度学习框架如TensorFlow和PyTorch的核心机制。在创建自己的深度学习库时,选择numpy作为主要后端是一个有趣的选择,因为numpy是Python中广泛使用的...

    jspuploadimageforsparknet

    从标签“sparknet”我们可以推断出这个项目使用了Spark框架来构建后端服务。Spark提供了简洁的API,使得开发者可以快速编写处理HTTP请求的代码。 压缩包子文件的文件名称列表中,"JSP上传图片并生成缩略图—编程...

    航空公司客户满意度数据转换与预测分析Power BI案例研究

    内容概要:本文档介绍了航空公司的业务分析案例研究,涵盖两个主要部分:a) 使用SSIS进行数据转换,b) 利用RapidMiner进行预测分析。这两个任务旨在通过改善客户满意度来优化业务运营。数据来源包括多个CSV文件,如flight_1.csv、flight_2.csv、type.csv、customer.csv 和 address.csv。第一部分要求学生创建事实表、客户维度表和时间维度表,并描述整个数据转换流程。第二部分则需要利用RapidMiner开发两种不同的模型(如决策树和逻辑回归)来预测客户满意度,并完成详细的报告,其中包括执行摘要、预测分析过程、重要变量解释、分类结果、改进建议和伦理问题讨论。 适合人群:适用于对数据科学和商业分析有一定基础的学生或专业人士。 使用场景及目标:本案例研究用于教学和评估,帮助学员掌握数据转换和预测建模的技术方法,提高客户满意度和业务绩效。目标是通过实际操作加深对相关工具和技术的理解,并能够将其应用于实际业务中。 其他说明:此作业占总评的40%,截止时间为2024年10月25日16:00。

    课题设计-基于MATLAB平台的图像去雾处理+项目源码+文档说明+课题介绍+GUI界面

    一、课题介绍 现在我国尤其是北方城市,工业发达,废弃排放严重,这使得雾霾越来越厉害,让能见度极低。这严重影响了我们的交通系统,导航系统,卫星定位系统等,给人民出行,工作带来极大的不便利。目前市场上高清拍摄设备虽然可以让成像清晰点,但是造价高昂。如果有一套软件处理系统,可以实时地处理含雾的图像,让成像去雾化,让图像变得清晰,将会很受欢迎。 该课题是基于MATLAB平台的图像去雾处理,配备一个人机交互GUI界面,可以选择全局直方图均衡化,Retinex算法,同态滤波,通过对比处理前后的图像的直方图,而直方图是一副图像各灰度值在0-256的分布个数的表,信息论已经整明,具有均匀分布直方图的图像,其信息量是最大的。 二、算法介绍 ①全局直方图均衡化:通俗地理解就是,不管三七二十一,直接强行对彩色图像的R,G,B三通道颜色进行histeq均衡处理,然后进行三通道重组; ②Retinex算法:通俗地讲就是,分离R,G,B三通道,对每个通道进行卷积滤波。

    微信支付V2版本的支付接口,java的SDK

    微信支付V2版本的支付接口,java的SDK

    ide-eval-resetter-2.1.14 无限试用插件

    一款IDEA好用的插件,适用于旗舰版,可以延长试用期限,你懂的!

    电力系统继电保护整定及其应用-发电机组与变压器保护

    内容概要:本文详细介绍了发电机组保护整定方法,讨论了发电机可能遇到的故障状态及相应的保护措施,包括定子绕组故障、转子绕组故障、过电流、过电压等情况,并提供了具体的保护配置。接着,对变压器常见故障进行了分类说明,并给出变压器的主保护和后备保护配置方案。文章进一步计算了不同短路点的短路电流,阐述了互感器的选择标准,并举例解释了纵联保护的应用和后备保护的作用。 适合人群:电力系统工程师、继电保护技术人员及相关研究领域的学者。 使用场景及目标:适用于发电厂和变电站的设计、维护和运行人员,旨在提高电力系统的安全性和稳定性。目标是确保电力系统关键设备的安全运行,防止故障的发生,减少事故造成的损失。 其他说明:本文不仅提供了详细的理论分析,还包括了大量的数据计算和实例说明,有助于读者更好地理解和掌握继电保护的相关知识和技术。

    基于C++开发的微商系统项目源码.zip

    基于C++开发的微商系统项目源码 使用技术:C++/Qt、Mysql、TCP/IP 软件架构 三个大端:服务端、客户端(买家端)、业务端(卖家端) PS:需要连Mysql数据库才能正常使用,连接mysql时记得把用户、密码啥的改为自己的数据库信息

    1503ANDH1503002016_20241116222825

    1503ANDH1503002016_20241116222825

    数理逻辑近世代数复习资料,思维导图部分

    数理逻辑近世代数复习资料,思维导图部分

    京东中台业务架构敏捷性方法 MotriDSP 落地实践.pdf

    京东中台业务架构敏捷性方法 MotriDSP 落地实践.pdf

    毕业设计&课设_电影推荐系统项目:Spring Boot 开发,含多种技术,有前端地址,提供开发及部署说明.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    CCF会员复习资料(1).zip

    CCF会员复习资料(1).zip

    C#ASP.NET养老院老人信息管理系统源码数据库 SQL2008源码类型 WebForm

    ASP.NET养老院老人信息管理系统源码 这是一款非常优秀的养老院老人信息管理系统。程序功能齐全,可选择性强。 管理员后台: 1、人员信息管理:老人信息管理、管理员信息管理、员工信息管理 2、公寓信息管理:添加公寓楼信息、管理公寓楼信息、添加公寓信息、管理公寓信息 3、公寓安排管理:添加公寓安排、公寓安排管理、缴费管理 4、健康管理信息管理:添加健康管理信息、管理健康管理信息 5、紧急联络人管理 6、意见信息管理 7、公告信息管理:添加公告信息、管理公告信息 8、出入信息管理:请假信息管理、访客记录管理、退住情况 员工后台: 1、人员信息管理:老人信息管理 2、健康管理信息管理:管理健康管理信息 3、紧急联络人管理 4、意见信息管理 5、公告信息管理:管理公告信息 6、出入信息管理:请假信息管理、访客记录管理、退住情况 老人后台: 1、修改个人信息 2、修改登陆密码 3、意见信息管理:发布意见信息、意见信息管理 4、查看公告信息

    走向现代化数据分析架构:趋势与挑战.pdf

    走向现代化数据分析架构:趋势与挑战.pdf

    PHP通用权限管理系统源码数据库 MySQL源码类型 WebForm

    PHP通用权限管理系统源码 安装说明: 1.把管理系统.sql 导入到MYSQL数据库中,把App/Common/Conf/db.php中的数据库名称,账号密码改成自己的。 2.把程序放在二级目录下,如:http://localhost/xcrm/ 账号 admin 密码admin123 3.请使用IE8以上,或是谷歌浏览器。 4.支持环境php+apache,php版本要大于5.3 注意:删除App下面 Runtime 文件夹;如果Linux服务器,需要分配777权限; 修改config.php数据库连接地址:绝对路径 大家在安装的时候遇到问题 1.页面顶部出现空白一行 解决办法:db.php 要以uft8无BOM格式编码 保存 notepad++ 编辑器里 格式 下 2.乱码问题 解决办法:数据库建表的时候选 uft8-general-ci 编码格式 然后点开 SQL 把1,SQL复制进去,执行就可以了 3、如果程序执行时报错? 解决办法:保存PHP>5.3版本 删除App下面 Runtime 文件夹 使用须知:注释:权限管理,修改完用户所属组之后,

    各省电商指数数据(1990-2022).xlsx

    详细介绍及样例数据:https://blog.csdn.net/m0_65541699/article/details/143823092

    会议席卡制作模版,电子表格,方便实用

    席卡制作模版会议较多的单位,经常要打印席卡,本模版可以解决燃眉之急

Global site tag (gtag.js) - Google Analytics