2017-03-15 7 views
0

私はこのようなものを実装しようとしています。https://www.youtube.com/watch?v=Fp9kzoAxsA4は、DL4Jライブラリを使用するGANN(遺伝的アルゴリズムニューラルネットワーク)です。deeplearning4jでカスタムウェイトを初期化する

遺伝的学習変数:

  • 遺伝子:クリーチャーニューラルネットワークの重み
  • フィットネス:総距離は移動しました。すべての生き物のため

ニューラルネットワーク層:

  • 入力層1いずれか5センサーセンサ方向又は0でない場合に壁があるかどう。
  • 出力レイヤー:クリーチャーの角度にマップされた線形出力。

これはクリーチャーのオブジェクトのための私のcreateBrain方法である:それは私がこのレポに https://github.com/kareem3d/GeneticNeuralNetwork

をプッシュしているに役立つかもしれない、これは https://github.com/kareem3d/GeneticNeuralNetwork/blob/master/src/main/java/com/mycompany/gaan/Creature.java

クリーチャークラスである場合

private void createBrain() { 
    Layer inputLayer = new DenseLayer.Builder() 
      // 5 eye sensors 
      .nIn(5) 
      .nOut(5) 
      // How do I initialize custom weights using creature genes (this.genes)? 
      // .weightInit(WeightInit.ZERO) 
      .activation(Activation.RELU) 
      .build(); 

    Layer outputLayer = new OutputLayer.Builder() 
      .nIn(5) 
      .nOut(1) 
      .activation(Activation.IDENTITY) 
      .lossFunction(LossFunctions.LossFunction.MSE) 
      .build(); 

    MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() 
      .seed(6) 
      .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) 
      .iterations(1) 
      .learningRate(0.006) 
      .updater(Updater.NESTEROVS).momentum(0.9) 
      .list() 
      .layer(0,inputLayer) 
      .layer(1, outputLayer) 
      .pretrain(false).backprop(true) 
      .build(); 

    this.brain = new MultiLayerNetwork(conf); 
    this.brain.init(); 
} 

私は学生を学ぶ機械なので、間違いがあれば、教えてください。ありがとう:)

答えて

1

レイヤ設定でウェイトを設定できるかどうかはわかりませんが(APIドキュメントには表示されませんでしたが)、モデルを初期化した後にネットワークパラメータを取得して設定できます。

これらのレイヤーを個別に設定するには、この例に従うことができます。

Iterator paramap_iterator = convolutionalEncoder.paramTable().entrySet().iterator(); 

    while(paramap_iterator.hasNext()) { 
     Map.Entry<String, INDArray> me = (Map.Entry<String, INDArray>) paramap_iterator.next(); 
     System.out.println(me.getKey());//print key 
     System.out.println(Arrays.toString(me.getValue().shape()));//print shape of INDArray 
     convolutionalEncoder.setParam(me.getKey(), Nd4j.rand(me.getValue().shape()));//set some random values 
    } 

あなたは、たとえば、setParams()params()を使用することができ、一度にネットワークのすべてのパラメータを設定したい場合は、

INDArray all_params = convolutionalEncoder.params(); 
convolutionalEncoder.setParams(Nd4j.rand(all_params.shape()));//set random values with the same shape 

詳細については、APIをチェックすることができます。 https://deeplearning4j.org/doc/org/deeplearning4j/nn/api/Model.html#params--

関連する問題