1 package yawn.nn.appart; 2 3 import yawn.nn.NeuralNode; 4 import yawn.util.Pattern; 5 6 /*** 7 * A prediction layer node. Receives as input the activation of the F2 layer, v. 8 * 9 * <p>$Id: PredictionNeuralNode.java,v 1.11 2005/05/09 11:04:55 supermarti Exp $</p> 10 * 11 * @author Luis Martí (luis dot marti at uc3m dot es) 12 * @version $Revision: 1.11 $ 13 */ 14 15 public class PredictionNeuralNode extends NeuralNode { 16 17 /*** 18 * 19 * @uml.property name="e" 20 */ 21 protected double e; 22 23 /*** 24 * 25 * @uml.property name="weights" 26 * @uml.associationEnd multiplicity="(1 1)" 27 */ 28 protected Pattern weights; 29 30 31 PredictionNeuralNode(int inputSize, double e1) { 32 super(inputSize); 33 weights = new Pattern(inputSize); 34 e = e1; 35 } 36 37 /*** 38 * 39 * @see yawn.nn.NeuralNode#activationFunction(yawn.util.Pattern) 40 */ 41 protected double activationFunction(Pattern input) { 42 return weights.innerProduct(input); 43 } 44 45 /*** 46 * @return the value of `e' 47 * 48 * @uml.property name="e" 49 */ 50 public double getE() { 51 return this.e; 52 } 53 54 55 /*** 56 * 57 * @see yawn.nn.NeuralNode#getInputSize() 58 */ 59 public int getInputSize() { 60 return weights.size(); 61 } 62 63 /*** 64 * @return the value 65 * 66 * @uml.property name="weights" 67 */ 68 public Pattern getWeights() { 69 return this.weights; 70 } 71 72 73 void learn(double v_j) { 74 int m = weights.size(); 75 for (int k = 0; k < m; k++) { 76 double aW = weights.getComponent(k); 77 double aLastIn = input.getComponent(k); 78 weights.setComponent(aW + (e * aLastIn * v_j), k); 79 } 80 } 81 82 /*** 83 * @param e 84 * 85 * @uml.property name="e" 86 */ 87 public void setE(double e) { 88 this.e = e; 89 } 90 91 /*** 92 * @param weights 93 * the weigths to set 94 * 95 * @uml.property name="weights" 96 */ 97 public void setWeights(Pattern weights) { 98 this.weights = weights; 99 } 100 101 /*** 102 * 103 * @param newInputFeature 104 * @param newWeightFeature 105 */ 106 public void updateStructure(double newInputFeature, double newWeightFeature) { 107 inputSize++; 108 if (input != null) { 109 input.appendComponent(newInputFeature); 110 } 111 weights.appendComponent(newWeightFeature); 112 } 113 }