开源的机器学习

BigDL入门 (1)

2019-04-18  本文已影响0人  飞驰2019

    在BigDL中,完成一次完整的深度学习过程共需要如下几步:

    1. 构建数据集:

    将训练数据转换成模型可以处理的类型,在Spark环境下即为Sample类型的RDD。

    2. 编写模型

    使用内置的类Keras接口编写深度模型。

    3. 模型训练

    选择合适的损失函数和优化方法(SGD,ADAM等等),对模型进行训练。

    4. 模型Serving (可选) 

    加载训练好的模型,供业务使用。

    一个完整的例子:

    例子使用iris数据集,该数据集收集了150条鸢尾花卉的数据,每条记录包含4个属性,分别为包含花萼长度、花萼宽度、花瓣长度和花瓣宽度,目标在于预测鸢尾花卉属于三个类别中的哪一类。在下面的例子中,将展示如何通过BigDL构建一个简单的神经网络用来完成这项任务。

    首先,需要在项目中引入BigDL的依赖,以Maven为例:

   <dependency> 

       <groupId>com.intel.analytics.bigdl</groupId>

       <artifactId>bigdl-SPARK_2.2</artifactId> 

       <version>0.7.2</version>

 </dependency> 

    然后,需要对运行时进行初始化。对于Spark应用而言,主要是SparkContext的初始化:

val sparkConf = new SparkConf()

    .setMaster("local[2]")

    .setAppName("IrisExample")

val sc = new SparkContext(Engine.createSparkConf(sparkConf))

Engine.init

    接下来,加载需要的数据,然后构建模型。在本例子中,使用BigDL内置的Keras风格接口来定义模型:

val sampleRDD = sc.textFile("data/iris.data", 1).filter(!"".equals(_)).map(line => {

    val subs = line.split(",")

    val feature=Tensor(subs.slice(0, 4).map(_.toFloat), Array(4))

    val getLabel:String => Float = {

        case "Iris-setosa" => 1.0f

        case "Iris-versicolor" => 2.0f

        case "Iris-virginica" => 3.0f

    }

    Sample[Float](feature, Tensor(Array(getLabel(subs(4))), Array(1)))}

)

val Array(trainingRDD, valRDD)=sampleRDD.randomSplit(Array(0.9, 0.1))

val model = Sequential[Float]() 

model.add(Dense(40, inputShape = Shape(4), activation = "relu")) 

model.add(Dense(20, activation = "relu")) 

model.add(Dense(3, activation = "softmax")) 

model.compile("adam", "sparse_categorical_crossentropy", Array("accuracy"))

    最后,对模型进行评估和训练,仍然使用Keras风格接口:

    model.fit(trainingRDD, batchSize=50, nbEpoch=50, validationData = valRDD)            

    相关代码可以在github中找到,不妨动手一试。

上一篇 下一篇

猜你喜欢

热点阅读