2017-03-15 9 views
0

Ich versuche, etwas wie diese https://www.youtube.com/watch?v=Fp9kzoAxsA4 zu implementieren, die ein GANN (Genetischer Algorithmus Neural Network) mit DL4J-Bibliothek ist.Initialize benutzerdefinierte Gewichte in deeplearning4j

Genetische Lern ​​Variablen:

  • Gene: Kreatur Neural Network Gewichte
  • Fitness: Gesamtstrecke bewegt.

Neuronale Netzwerkschichten für jede Kreatur:

  • Eingangsschicht: 5-Sensoren, die entweder 1 wenn eine Wand in der Sensorrichtung gibt es oder 0 wenn nicht. enter image description here
  • Ausgabeschicht: Linearer Ausgang, der dem Winkel der Kreatur entspricht.

Das ist meine createBrain Methode zur Kreatur Objekt:

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

Wenn es könnte helfen, ich habe auf diese Repo geschoben https://github.com/kareem3d/GeneticNeuralNetwork

Und das ist die Kreatur Klasse https://github.com/kareem3d/GeneticNeuralNetwork/blob/master/src/main/java/com/mycompany/gaan/Creature.java

Ich bin ein Student, der maschinell lernt. Wenn Sie offensichtliche Fehler sehen, lassen Sie es mich bitte wissen, danke :)

Antwort

1

Ich weiß nicht, ob Sie Gewichtungen in der Layer-Konfiguration (ich konnte nicht in der API-Dokumentation sehen), aber Sie können Netzwerkparameter nach Initialisierung des Modells erhalten und einstellen.

Um sie einzeln für die Ebenen festzulegen, können Sie diesem Beispiel folgen;

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 
    } 

Wenn Sie alle Parameter des Netzes an setzen möchten, wenn Sie setParams() und params(), zum Beispiel verwenden können;

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

Sie können API für weitere Informationen überprüfen; https://deeplearning4j.org/doc/org/deeplearning4j/nn/api/Model.html#params--