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]