码迷,mamicode.com
首页 > Web开发 > 详细

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.3

时间:2015-05-28 21:38:38      阅读:802      评论:0      收藏:0      [点我收藏+]

标签:spark   mllib   deep learning   深度学习   神经网络   

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.3

http://blog.csdn.net/sunbow0/

第一章Neural Net(神经网络)

3实例

3.1 测试数据

3.1.1 测试函数

采用智能优化算法的经典测试函数,如下:

(1)Sphere Model

函数表达式

技术分享

搜索范围

技术分享             

全局最优值    

技术分享    

函数简介:此函数为非线性的对称单峰函数,不同维之间是不可分离的。此函数相对比较简单,大多数算法都能够轻松地达到优化效果,其主要用于测试算法的寻优精度。下图给出了此函数维数为2时的图形。

技术分享

(2)Generalized Rosenbrock

函数表达式

技术分享

搜索范围       

技术分享            

全局最优值             

技术分享

函数简介:此函数是很难极小化的典型病态二次函数,其全局最优与可到达的局部最优之间有一道狭窄的山谷,曲面山谷中的点的最速下降方向几乎与到函数最小值的最好方向垂直。由于此函数对搜索提供很少信息,使算法很难辨别搜索方向。下图给出了此函数维数为2时的图形。

技术分享

(3)Generalized Rastrigin

函数表达式

技术分享

搜索范围

  技术分享                

全局最优值     

 技术分享      

函数简介:此函数基于Sphere函数的基础上,使用了余弦函数来产生大量的局部最小值。它是一个典型的具有大量局部最优点的复杂多峰函数,此函数很容易使算法陷入局部最优,而不能得到全局最优解。下图给出了此函数维数为2时的图形。 

技术分享

3.1.2 测试函数代码

/**

   * 测试函数: Rosenbrock, Rastrigin

   * 随机生成n2维数据,并根据测试函数计算Y

   * n1 行,n2 列,b1 上限,b2 下限,function 计算函数

   */

  def RandM(

    n1: Int,

    n2: Int,

    b1: Double,

    b2: Double,

    function: String): BDM[Double] = {

    //    val n1 = 2

    //    val n2 = 3

    //    val b1 = -30

    //    val b2 = 30

    valbdm1 = BDM.rand(n1, n2) * (b2 - b1).toDouble + b1.toDouble

    valbdm_y = function match {

      case"rosenbrock" =>

        valxi0 = bdm1(::, 0 to (bdm1.cols - 2))

        valxi1 = bdm1(::, 1 to (bdm1.cols - 1))

        valxi2 = (xi0 :* xi0)

        valm1 = ((xi1 - xi2) :* (xi1 - xi2)) * 100.0 + ((xi0 - 1.0) :* (xi0 - 1.0))

        valm2 = m1 * BDM.ones[Double](m1.cols, 1)

        m2

      case"rastrigin" =>

        valxi0 = bdm1

        valxi2 = (xi0 :* xi0)

        valsicos = Bcos(xi0 * 2.0 * Pi) * 10.0

        valm1 = xi2 - sicos + 10.0

        valm2 = m1 * BDM.ones[Double](m1.cols, 1)

        m2

      case"sphere" =>

        valxi0 = bdm1

        valxi2 = (xi0 :* xi0)

        valm1 = xi2

        valm2 = m1 * BDM.ones[Double](m1.cols, 1)

        m2

    }

    valrandm = BDM.horzcat(bdm_y, bdm1)

    randm

  }

}

3.2 NN实例

//*******************1(基于经典优化算法测试函数随机生成样本)*****************//

    //2 随机生成测试数据

    // 随机数生成

    Logger.getRootLogger.setLevel(Level.WARN)

    valsample_n1 = 1000

    valsample_n2 = 5

    valrandsamp1 = RandSampleData.RandM(sample_n1, sample_n2, -10, 10, "sphere")

    // 归一化[0 1]

    valnormmax = Bmax(randsamp1(::, breeze.linalg.*))

    valnormmin = Bmin(randsamp1(::, breeze.linalg.*))

    valnorm1 = randsamp1 - (BDM.ones[Double](randsamp1.rows, 1)) * normmin

    valnorm2 = norm1 :/ ((BDM.ones[Double](norm1.rows, 1)) * (normmax - normmin))

    // 转换样本train_d

    valrandsamp2 = ArrayBuffer[BDM[Double]]()

    for (i <- 0 to sample_n1 - 1) {

      valmi = norm2(i, ::)

      valmi1 = mi.inner

      valmi2 = mi1.toArray

      valmi3 = new BDM(1, mi2.length, mi2)

      randsamp2 += mi3

    }

    valrandsamp3 = sc.parallelize(randsamp2, 10)

    sc.setCheckpointDir("hdfs://192.168.180.79:9000/user/huangmeiling/checkpoint")

    randsamp3.checkpoint()

    valtrain_d = randsamp3.map(f => (new BDM(1, 1, f(::, 0).data), f(::, 1 to -1)))

    //3 设置训练参数,建立模型

    // opts:迭代步长,迭代次数,交叉验证比例

    valopts = Array(100.0, 20.0, 0.2)

    train_d.cache

    valnumExamples = train_d.count()

    println(s"numExamples = $numExamples.")

    valNNmodel = new NeuralNet().

      setSize(Array(5, 7, 1)).

      setLayer(3).

      setActivation_function("tanh_opt").

      setLearningRate(2.0).

      setScaling_learningRate(1.0).

      setWeightPenaltyL2(0.0).

      setNonSparsityPenalty(0.0).

      setSparsityTarget(0.05).

      setInputZeroMaskedFraction(0.0).

      setDropoutFraction(0.0).

      setOutput_function("sigm").

      NNtrain(train_d, opts)

 

    //4 模型测试

    valNNforecast = NNmodel.predict(train_d)

    valNNerror = NNmodel.Loss(NNforecast)

    println(s"NNerror = $NNerror.")

    valprintf1 = NNforecast.map(f => (f.label.data(0), f.predict_label.data(0))).take(200)

    println("预测结果——实际值:预测值:误差")

    for (i <- 0 until printf1.length)

      println(printf1(i)._1 + "\t" + printf1(i)._2 + "\t" + (printf1(i)._2 - printf1(i)._1))

    println("权重W{1}")

    valtmpw0 = NNmodel.weights(0)

    for (i <- 0 to tmpw0.rows - 1) {

      for (j <- 0 to tmpw0.cols - 1) {

        print(tmpw0(i, j) + "\t")

      }

      println()

    }

    println("权重W{2}")

    valtmpw1 = NNmodel.weights(1)

    for (i <- 0 to tmpw1.rows - 1) {

      for (j <- 0 to tmpw1.cols - 1) {

        print(tmpw1(i, j) + "\t")

      }

      println()

    } 

转载请注明出处:

http://blog.csdn.net/sunbow0/

 

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.3

标签:spark   mllib   deep learning   深度学习   神经网络   

原文地址:http://blog.csdn.net/sunbow0/article/details/46126671

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!