1 package yawn.nn; 2 3 import java.util.ArrayList; 4 5 import yawn.util.Pattern; 6 7 /*** 8 * A layer of neurons 9 * 10 * <p>$Id: Layer.java,v 1.10 2005/05/09 11:04:58 supermarti Exp $</p> 11 * 12 * @author Luis Martí (luis dot marti at uc3m dot es) 13 * @version $Revision: 1.10 $ 14 */ 15 public class Layer { 16 17 /*** 18 * 19 * @uml.property name="adapting" 20 */ 21 protected boolean adapting; 22 23 /*** 24 * 25 * @uml.property name="inputSize" 26 */ 27 protected int inputSize; 28 29 /*** 30 * 31 * @uml.property name="nextLayer" 32 * @uml.associationEnd multiplicity="(0 1)" 33 */ 34 protected Layer nextLayer; 35 36 /*** 37 * 38 * @uml.property name="units" 39 * @uml.associationEnd multiplicity="(0 -1)" elementType="yawn.nn.NeuralNode" 40 */ 41 protected ArrayList units; 42 43 44 protected Layer() { 45 setAdapting(false); 46 units = new ArrayList(); 47 nextLayer = null; 48 inputSize = 0; 49 } 50 51 public Layer(Layer nextLayer, int inputSize) { 52 this(); 53 this.nextLayer = nextLayer; 54 this.inputSize = inputSize; 55 } 56 57 public void connectWith(Layer next) { 58 nextLayer = next; 59 } 60 61 protected Pattern getActivations() { 62 Pattern res = new Pattern(size()); 63 64 for (int i = 0; i < size(); i++) { 65 res.setComponent(((NeuralNode) units.get(i)).output(), i); 66 } 67 return res; 68 } 69 70 /*** 71 * 72 * @uml.property name="inputSize" 73 */ 74 public int getInputSize() { 75 return inputSize; 76 } 77 78 79 public NeuralNode[] getNodes() { 80 return (NeuralNode[]) units.toArray(new NeuralNode[1]); 81 } 82 83 /*** 84 * @return true if adaptation is taking place in the neuron 85 * 86 * @uml.property name="adapting" 87 */ 88 public boolean isAdapting() { 89 return this.adapting; 90 } 91 92 93 public Pattern output() { 94 return getActivations(); 95 } 96 97 public void propagateToNextLayer() { 98 nextLayer.setInput(getActivations()); 99 } 100 101 public void reset() { 102 int l = size(); 103 for (int i = 0; i < l; i++) 104 ((NeuralNode) units.get(i)).reset(); 105 } 106 107 /*** 108 * @param adapting 109 * 110 * @uml.property name="adapting" 111 */ 112 public void setAdapting(boolean adapting) { 113 this.adapting = adapting; 114 } 115 116 117 public void setInput(Pattern input) { 118 NeuralNode[] nodes = getNodes(); 119 for (int i = 0; i < nodes.length; i++) { 120 nodes[i].setInput(input); 121 } 122 } 123 124 /*** 125 * 126 * @uml.property name="inputSize" 127 */ 128 protected void setInputSize(int inputSize) { 129 this.inputSize = inputSize; 130 } 131 132 public int size() { 133 return units.size(); 134 } 135 }