2017-03-15 14 views
0

나는과 같은 것을 구현하려고하는데, 이는 DL4J 라이브러리를 사용하는 GANN (Genetic Algorithm Neural Network)입니다.deeplearning4j에서 사용자 정의 가중치 초기화

유전 학습 변수 :

  • 유전자 : 생물 신경망의 가중치
  • 피트니스 : 총 거리를 이동했다. 모든 생물체에 대한

신경망 레이어 :

  • 입력 층 : 어느 1 경우는 센서 방향 벽 0 또는 그렇지 않으면 거기에 5 개 센서.
  • 출력 레이어 : 생물의 각도에 매핑되는 선형 출력.

이 생물 개체에 대한 내 createBrain 방법 :

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(); 
} 

내가이 REPO https://github.com/kareem3d/GeneticNeuralNetwork

으로 추진해 왔습니다 그리고 이것은 생물 클래스 https://github.com/kareem3d/GeneticNeuralNetwork/blob/master/src/main/java/com/mycompany/gaan/Creature.java

입니다 도움이 될 수있는 경우

나는 기계를 배우는 기계 다. 그래서 명백한 실수가 있으면 알려줘, 고마워. :)

답변

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--