Author: tommaso
Date: Tue Jun 18 13:14:19 2013
New Revision: 1494132

URL: http://svn.apache.org/r1494132
Log:
minor refactoring to javadoc, fixing backprop step 2

Modified:
    labs/yay/trunk/api/src/main/java/org/apache/yay/CostFunction.java
    labs/yay/trunk/api/src/main/java/org/apache/yay/Hypothesis.java
    
labs/yay/trunk/api/src/main/java/org/apache/yay/NeuralNetworkCostFunction.java
    
labs/yay/trunk/core/src/main/java/org/apache/yay/core/BackPropagationLearningStrategy.java
    
labs/yay/trunk/core/src/test/java/org/apache/yay/core/BackPropagationLearningStrategyTest.java

Modified: labs/yay/trunk/api/src/main/java/org/apache/yay/CostFunction.java
URL: 
http://svn.apache.org/viewvc/labs/yay/trunk/api/src/main/java/org/apache/yay/CostFunction.java?rev=1494132&r1=1494131&r2=1494132&view=diff
==============================================================================
--- labs/yay/trunk/api/src/main/java/org/apache/yay/CostFunction.java (original)
+++ labs/yay/trunk/api/src/main/java/org/apache/yay/CostFunction.java Tue Jun 
18 13:14:19 2013
@@ -22,8 +22,7 @@ import java.util.Collection;
 
 /**
  * A cost function calculates the cost of using a specified {@link Hypothesis})
- * for fitting the given corpus (a {@link Collection}
- * of {@link TrainingExample}s).
+ * for fitting the given corpus (a {@link Collection} of {@link 
TrainingExample}s).
  */
 public interface CostFunction<T, I, O> {
 

Modified: labs/yay/trunk/api/src/main/java/org/apache/yay/Hypothesis.java
URL: 
http://svn.apache.org/viewvc/labs/yay/trunk/api/src/main/java/org/apache/yay/Hypothesis.java?rev=1494132&r1=1494131&r2=1494132&view=diff
==============================================================================
--- labs/yay/trunk/api/src/main/java/org/apache/yay/Hypothesis.java (original)
+++ labs/yay/trunk/api/src/main/java/org/apache/yay/Hypothesis.java Tue Jun 18 
13:14:19 2013
@@ -19,7 +19,7 @@
 package org.apache.yay;
 
 /**
- * In machine learning an hypothesis is the output of the applying a learning
+ * In machine learning an hypothesis is the output of applying a learning
  * algorithm to a training set, an hypothesis maps new inputs to possible 
outputs.
  */
 public interface Hypothesis<T, I, O> {

Modified: 
labs/yay/trunk/api/src/main/java/org/apache/yay/NeuralNetworkCostFunction.java
URL: 
http://svn.apache.org/viewvc/labs/yay/trunk/api/src/main/java/org/apache/yay/NeuralNetworkCostFunction.java?rev=1494132&r1=1494131&r2=1494132&view=diff
==============================================================================
--- 
labs/yay/trunk/api/src/main/java/org/apache/yay/NeuralNetworkCostFunction.java 
(original)
+++ 
labs/yay/trunk/api/src/main/java/org/apache/yay/NeuralNetworkCostFunction.java 
Tue Jun 18 13:14:19 2013
@@ -24,5 +24,5 @@ import org.apache.commons.math3.linear.R
  * A generic {@link CostFunction} for {@link NeuralNetwork}s which is 
parametrized
  * by its {@link RealMatrix} weights (one per layer).
  */
-public interface NeuralNetworkCostFunction extends 
CostFunction<RealMatrix,Double, Double> {
+public interface NeuralNetworkCostFunction extends CostFunction<RealMatrix, 
Double, Double> {
 }

Modified: 
labs/yay/trunk/core/src/main/java/org/apache/yay/core/BackPropagationLearningStrategy.java
URL: 
http://svn.apache.org/viewvc/labs/yay/trunk/core/src/main/java/org/apache/yay/core/BackPropagationLearningStrategy.java?rev=1494132&r1=1494131&r2=1494132&view=diff
==============================================================================
--- 
labs/yay/trunk/core/src/main/java/org/apache/yay/core/BackPropagationLearningStrategy.java
 (original)
+++ 
labs/yay/trunk/core/src/main/java/org/apache/yay/core/BackPropagationLearningStrategy.java
 Tue Jun 18 13:14:19 2013
@@ -67,14 +67,14 @@ public class BackPropagationLearningStra
         triangle[noOfMatrixes] = 
triangle[noOfMatrixes].add(activations[noOfMatrixes - 1].outerProduct(error));
 
         // back prop the error and update the deltas accordingly
-        // TODO : eventually remove the bias term from the error calculations
-        for (int l = weightsMatrixSet.length - 2; l >= 0; l--) {
-          RealVector resultingDeltaVector = 
calculateDeltaVector(weightsMatrixSet[l], activations[l], nextLayerDelta);
+        for (int l = weightsMatrixSet.length - 1; l > 0; l--) {
+          RealVector resultingDeltaVector = 
calculateDeltaVector(weightsMatrixSet[l], activations[l-1], nextLayerDelta);
 
           if (triangle[l] == null) {
             triangle[l] = new 
Array2DRowRealMatrix(weightsMatrixSet[l].getRowDimension(), 
weightsMatrixSet[l].getColumnDimension());
           }
-          triangle[l] = 
triangle[l].add(resultingDeltaVector.outerProduct(activations[l-1]));
+          triangle[l] = 
triangle[l].add(resultingDeltaVector.outerProduct(activations[l]));
+          nextLayerDelta = resultingDeltaVector;
         }
 
       } catch (Exception e) {
@@ -93,9 +93,10 @@ public class BackPropagationLearningStra
   }
 
   private RealVector calculateDeltaVector(RealMatrix thetaL, RealVector 
activationsVector, RealVector nextLayerDelta) {
+    // TODO : remove the bias term from the error calculations
     ArrayRealVector identity = new 
ArrayRealVector(activationsVector.getDimension(), 1d);
     RealVector gz = 
activationsVector.ebeMultiply(identity.subtract(activationsVector)); // = a^l 
.* (1-a^l)
-    return thetaL.transpose().preMultiply(nextLayerDelta).ebeMultiply(gz); // 
TODO : fix this as it seems wrong
+    return thetaL.preMultiply(nextLayerDelta).ebeMultiply(gz);
   }
 
   private RealVector calculateOutputError(TrainingExample<Double, Double> 
trainingExample, RealVector[] activations) {

Modified: 
labs/yay/trunk/core/src/test/java/org/apache/yay/core/BackPropagationLearningStrategyTest.java
URL: 
http://svn.apache.org/viewvc/labs/yay/trunk/core/src/test/java/org/apache/yay/core/BackPropagationLearningStrategyTest.java?rev=1494132&r1=1494131&r2=1494132&view=diff
==============================================================================
--- 
labs/yay/trunk/core/src/test/java/org/apache/yay/core/BackPropagationLearningStrategyTest.java
 (original)
+++ 
labs/yay/trunk/core/src/test/java/org/apache/yay/core/BackPropagationLearningStrategyTest.java
 Tue Jun 18 13:14:19 2013
@@ -42,6 +42,7 @@ public class BackPropagationLearningStra
     BackPropagationLearningStrategy backPropagationLearningStrategy =
             new BackPropagationLearningStrategy(predictionStrategy, new 
LogisticRegressionCostFunction(0.4d));
 
+    // 3 input units, 3 hidden units, 1 output unit
     RealMatrix[] initialWeights = new RealMatrix[3];
     initialWeights[0] = new Array2DRowRealMatrix(new double[][]{{0d, 0d, 0d}, 
{1d, 0.6d, 3d}, {1d, 2d, 2d}, {1d, 0.6d, 3d}});
     initialWeights[1] = new Array2DRowRealMatrix(new double[][]{{0d, 0d, 0d, 
0d}, {0d, 0.5d, 1d, 0.5d}, {0d, 0.1d, 8d, 0.1d}, {0d, 0.1d, 8d, 0.2d}});



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to