MLSQL拥抱BigDL,轻轻松松无编码玩深度学习

前言

原谅我,前半句是真的,后半句是噱头,但是真的很简化了。 MLSQL已经有一个相对来比较完善的Python Runtime,细节可以参看这篇文章,所以玩深度学习是很容易的,不过需要你提供一段tensorflow代码或者项目。

但是我一直认为这应该是高阶用户的使用场景,因为你必须要写一个完整的tf/keras之类的代码,这对使用者的要求还是颇高的(当然,你也可以使用别人写好的集成到MLSQL)。 能不能有一种开箱即用让人玩转深度学习的东西呢?于是我首先就集成了DeepLearning4J,事实上效果并不好(多方面原因,以后有时间展开讲)。直到遇到了BigDL,发现这个目标很快会实现了。

BigDL是用纯scala/Java实现的一套深度学习库这点很吸引哦,可以避免使用Python runtime 而导致的复杂环境要求。第二个是,我之前说,其实GPU真的很贵,但是大部分中小企业已经积累了足够多的CPU资源,并且很多情况下是用不满的,而BigDL针对Intel(毕竟是Intel出品)CPU做了很多的优化,这样就可以充分利用闲置的CPU资源。

前面说了下缘由,现在我们来看看如何通过MLSQL无需编码但却足够灵活的玩转深度学习。

环境准备

  1. 下载一个spark 2.3.2 发行版
  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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【每周一坑】缩小图片尺寸

之前我们的题目大多偏向解决数学问题,今天来一道偏应用的: 我们知道,通常来说一张图片的分辨率越高,它就越清晰,但文件占用的空间就越大。有时候我们并不需要那么高的...

31270
来自专栏cs

python统计一下自己的花费

15630
来自专栏宏伦工作室

深度有趣 | 01-02 前言和准备工作

用 Python 做一些有意思的案例和应用,内容和领域不限,可以包括数据分析、自然语言理解、计算机视觉,等等等等

11320
来自专栏钱坤的专栏

Akamai在内容分发网络中的算法研究(翻译总结)

原文是《Algorithmic Nuggets in Content Delivery》。这篇文章是akamai15年的文章,里面介绍了一些akamai在内容分...

39000
来自专栏UML

用例图教程(示例指南)

用例是系统分析中用于识别,澄清和组织系统需求的方法。用例由特定环境中系统和用户之间的一组可能的交互序列组成,并且与特定目标相关。它由一组元素(例如,类和接口)组...

24430
来自专栏CDA数据分析师

手把手教你如何使用Excel高级筛选

Excel自动筛选在工作中被经常使用,但掌握高级筛选的同学却很少,甚至都不知道高级筛选高级到哪儿了。今天兰色还原一个高大尚的高级筛选功能。 一、高级筛选哪里“高...

21550
来自专栏逍遥剑客的游戏开发

Havok使用笔记

20130
来自专栏吉浦迅科技

DAY24:阅读SIMT架构

28630
来自专栏AI科技大本营的专栏

TensorFlow 1.7.0正式发布,Bug修复和改进内容都在这里了

编译 | AI科技大本营 参与 | 张建军 TensorFlow 1.7.0 近日正式发布,新版本主要有以下改进内容,AI科技大本营对其进行了编译。 主要特征...

27540
来自专栏上善若水

L016使用/dev/random生成随机数

很多库例程产生的“随机”数是准备用于仿真、游戏等等;它们在被用于密钥生成一类的安全函数时是不够随机的。其问题在于这些库例程使用的算法的未来值可以被攻击者轻易地推...

17940

扫码关注云+社区

领取腾讯云代金券