内容简介:原谅我,前半句是真的,后半句是噱头,但是真的很简化了。 MLSQL已经有一个相对来比较完善的Python Runtime,细节可以参看这篇文章,所以玩深度学习是很容易的,不过需要你提供一段tensorflow代码或者项目。但是我一直认为这应该是高阶用户的使用场景,因为你必须要写一个完整的tf/keras之类的代码,这对使用者的要求还是颇高的(当然,你也可以使用别人写好的集成到MLSQL)。 能不能有一种开箱即用让人玩转深度学习的东西呢?于是我首先就集成了DeepLearning4J,事实上效果并不好(多方
前言
原谅我,前半句是真的,后半句是噱头,但是真的很简化了。 MLSQL已经有一个相对来比较完善的Python Runtime,细节可以参看这篇文章,所以玩深度学习是很容易的,不过需要你提供一段tensorflow代码或者项目。
但是我一直认为这应该是高阶用户的使用场景,因为你必须要写一个完整的tf/keras之类的代码,这对使用者的要求还是颇高的(当然,你也可以使用别人写好的集成到MLSQL)。 能不能有一种开箱即用让人玩转深度学习的东西呢?于是我首先就集成了DeepLearning4J,事实上效果并不好(多方面原因,以后有时间展开讲)。直到遇到了BigDL,发现这个目标很快会实现了。
BigDL是用纯scala/Java实现的一套深度学习库这点很吸引哦,可以避免使用Python runtime 而导致的复杂环境要求。第二个是,我之前说,其实GPU真的很贵,但是大部分中小企业已经积累了足够多的CPU资源,并且很多情况下是用不满的,而BigDL针对Intel(毕竟是Intel出品)CPU做了很多的优化,这样就可以充分利用闲置的CPU资源。
前面说了下缘由,现在我们来看看如何通过MLSQL无需编码但却足够灵活的玩转深度学习。
环境准备
- 下载一个 spark 2.3.2 发行版
- 下载 MLSQL preview 版本
Ok,这就是全部工作。运行起来:
cd spark-2.3.2-bin-hadoop2.7/ ./bin/spark-submit --class streaming.core.StreamingApp \ --master local[*] \ --name sql-interactive \ streamingpro-mlsql-1.1.3-dev.jar \ -streaming.name sql-interactive \ -streaming.job.file.path file:///tmp/query.json \ -streaming.platform spark \ -streaming.rest true \ -streaming.driver.port 9003 \ -streaming.spark.service true \ -streaming.thrift false \ -streaming.enableHiveSupport true
query.json 包含 "{}" 就行了。启动后访问url地址:
http://127.0.0.1:9003
开始玩起来
首先我们看看都有哪些模块可以用:
image.png
不过那如果我只想看BigDL相关的模块,怎么办呢?没关系 我们过滤下:
image.png
恩 只有一个BigDL分类算法。现在我想看看这个算法的细节,比如文档和示例:
image.png
显示比较糟糕,大家将就下,然后把代码复制出来:
-- You can download the MNIST Data from [here](http://yann.lecun.com/exdb/mnist/). Unzip all the -- files and put them in one folder(e.g. mnist). set json = '''{}'''; load jsonStr.`json` as emptyData; run emptyData as MnistLoaderExt.`` where mnistDir="/Users/allwefantasy/Downloads/mnist" as data; train data as BigDLClassifyExt.`/tmp/bigdl` where fitParam.0.featureSize="[28,28]" and fitParam.0.classNum="10" and fitParam.0.maxEpoch="1" -- 实际运行时把 \\ 去掉 and fitParam.0.code=\\''' def apply(params:Map[String,String])={ val model = Sequential() model.add(Reshape(Array(1, 28, 28), inputShape = Shape(28, 28, 1))) model.add(Convolution2D(6, 5, 5, activation = "tanh").setName("conv1_5x5")) model.add(MaxPooling2D()) model.add(Convolution2D(12, 5, 5, activation = "tanh").setName("conv2_5x5")) model.add(MaxPooling2D()) model.add(Flatten()) model.add(Dense(100, activation = "tanh").setName("fc1")) model.add(Dense(params("classNum").toInt, activation = "softmax").setName("fc2")) } \\''' ; predict data as BigDLClassifyExt.`/tmp/bigdl`; register BigDLClassifyExt.`/tmp/bigdl` as mnistPredict; select vec_argmax(mnistPredict(vec_dense(features))) as predict_label, label from data as output;
示例说下载一个mnist数据集,解压后应该有四个文件:
image.png
现在把上面的代码黏贴到控制台(记得修改你数据路径),点击运行,恭喜,你的第一个深度学习算法就跑起来了。
image.png
跑完之后你会发现,好像结果差的比较多,那时训练次数太少了,那我怎么知道通过什么参数去修改呢?别急,用一个指令就知道了:
image.png
红框部分的值其实默认是1,你可以设置10轮左右,我测试过50轮,效果已经足够好了。
另外因为BigDL遵循了torch的标准,所以你的预测值需要+1 才能和实际值对上。
因为深度学习一般而言都是图片,也不会像mnist那样,是个特殊的文件,我想知道有没有什么好的模块可以处理图片,还是老办法,用 sql 找找看:
image.png
我没截图全,下面其实还有几个。大家看到的是基于BigDL实现的,我们看看具体的使用方式,
image.png
通过这个可以看到文档和代码。
现在我们黏贴出来,大概是这个样子的:
set json='''{}'''; load jsonStr.`json` as emptyData; run emptyData as ImageLoaderExt.`/Users/allwefantasy/Downloads/jack` -- 实际运行时把 \\ 去掉 where code=\\''' def apply(params:Map[String,String]) = { Resize(256, 256) -> CenterCrop(224, 224) -> MatToTensor() -> ImageFrameToSample() } \\''' as images; select imageName from images limit 1 as output;
以上所述就是小编给大家介绍的《MLSQL拥抱BigDL,轻轻松松无编码玩深度学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 沈向洋:从深度学习到深度理解
- 深度重建:基于深度学习的图像重建
- 深度网络揭秘之深度网络背后的数学
- 深度解析Python深度学习框架的对比
- 【深度好文】深度分析如何获取方法参数名
- 直观理解深度学习基本概念(小白入门深度学习)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
谷歌时代的柏拉图
[美] 丽贝卡·戈尔茨坦 / 李鹏程 / 中信出版集团·新思文化 / 2017-12-10 / 69.00元
我愿意用我所有的科技去换取和苏格拉底相处的一个下午。 ——史蒂夫•乔布斯 谷歌时代,科技昌明,众声喧哗,哲学提出的许多问题,科学似乎都已经给出了答案。若是如此,为什么我们今天还需要哲学?这个由古希腊城邦时代的哲人苏格拉底和柏拉图开创的学科,真的过时了吗? 已经2400岁 的柏拉图对此有话要说。哲学家兼小说家、美国国家人文奖章获得者戈尔茨坦史海钩沉,从经典著作中复活了柏拉图,让他来......一起来看看 《谷歌时代的柏拉图》 这本书的介绍吧!