Browse Source

Code cleanup

- Cleanup interface
- Remove debug logs
Alexey Edelev 5 years ago
parent
commit
f1a89d9b66

+ 15 - 21
neuralnetwork/main.go

@@ -4,38 +4,32 @@ import (
 	"fmt"
 
 	neuralnetwork "./neuralnetworkbase"
-	mat "gonum.org/v1/gonum/mat"
 )
 
 func main() {
 	sizes := []int{4, 8, 8, 3}
 	nn := neuralnetwork.NewNeuralNetwork(sizes, 0.1, 481)
 
-	for i := 0; i < nn.Count; i++ {
-		if i > 0 {
-			fmt.Printf("Weights before:\n%v\n\n", mat.Formatted(nn.Weights[i], mat.Prefix(""), mat.Excerpt(0)))
-			fmt.Printf("Biases before:\n%v\n\n", mat.Formatted(nn.Biases[i], mat.Prefix(""), mat.Excerpt(0)))
-			fmt.Printf("Z before:\n%v\n\n", mat.Formatted(nn.Z[i], mat.Prefix(""), mat.Excerpt(0)))
-		}
-		fmt.Printf("A before:\n%v\n\n", mat.Formatted(nn.A[i], mat.Prefix(""), mat.Excerpt(0)))
-	}
+	// for i := 0; i < nn.Count; i++ {
+	// 	if i > 0 {
+	// 		fmt.Printf("Weights before:\n%v\n\n", mat.Formatted(nn.Weights[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 		fmt.Printf("Biases before:\n%v\n\n", mat.Formatted(nn.Biases[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 		fmt.Printf("Z before:\n%v\n\n", mat.Formatted(nn.Z[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 	}
+	// 	fmt.Printf("A before:\n%v\n\n", mat.Formatted(nn.A[i], mat.Prefix(""), mat.Excerpt(0)))
+	// }
 
 	dataSet, result := readData("./iris.data")
 	nn.Train(dataSet, result)
 
-	for i := 0; i < nn.Count; i++ {
-		if i > 0 {
-			fmt.Printf("Weights after:\n%v\n\n", mat.Formatted(nn.Weights[i], mat.Prefix(""), mat.Excerpt(0)))
-			fmt.Printf("Biases after:\n%v\n\n", mat.Formatted(nn.Biases[i], mat.Prefix(""), mat.Excerpt(0)))
-			fmt.Printf("Z after:\n%v\n\n", mat.Formatted(nn.Z[i], mat.Prefix(""), mat.Excerpt(0)))
-		}
-		fmt.Printf("A after:\n%v\n\n", mat.Formatted(nn.A[i], mat.Prefix(""), mat.Excerpt(0)))
-	}
-	// data := make([]float64, sizes[0])
-	// for i := range data {
-	// 	data[i] = rand.Float64()
+	// for i := 0; i < nn.Count; i++ {
+	// 	if i > 0 {
+	// 		fmt.Printf("Weights after:\n%v\n\n", mat.Formatted(nn.Weights[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 		fmt.Printf("Biases after:\n%v\n\n", mat.Formatted(nn.Biases[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 		fmt.Printf("Z after:\n%v\n\n", mat.Formatted(nn.Z[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 	}
+	// 	fmt.Printf("A after:\n%v\n\n", mat.Formatted(nn.A[i], mat.Prefix(""), mat.Excerpt(0)))
 	// }
-	// aIn := mat.NewDense(sizes[0], 1, data)
 
 	failCount := 0
 	for i := 0; i < len(dataSet); i++ {

+ 9 - 0
neuralnetwork/neuralnetworkbase/common.go

@@ -32,3 +32,12 @@ func sigmoid(x float64) float64 {
 func sigmoidPrime(x float64) float64 {
 	return sigmoid(x) * (1 - sigmoid(x))
 }
+
+func makeBackGradien(in mat.Matrix, actual mat.Matrix, alpha float64) *mat.Dense {
+	scaled := &mat.Dense{}
+	result := &mat.Dense{}
+
+	scaled.Scale(alpha, in)
+	result.Sub(actual, scaled)
+	return result
+}

+ 9 - 18
neuralnetwork/neuralnetworkbase/neuralnetwork.go

@@ -15,10 +15,6 @@ type NeuralNetwork struct {
 	trainingCycles int
 }
 
-func (nn *NeuralNetwork) Result() *mat.Dense {
-	return nn.A[nn.Count-1]
-}
-
 func NewNeuralNetwork(Sizes []int, nu float64, trainingCycles int) (nn *NeuralNetwork) {
 	nn = &NeuralNetwork{}
 	nn.Sizes = Sizes
@@ -38,8 +34,8 @@ func NewNeuralNetwork(Sizes []int, nu float64, trainingCycles int) (nn *NeuralNe
 }
 
 func (nn *NeuralNetwork) Predict(aIn mat.Matrix) (maxIndex int, max float64) {
-	nn.Forward(aIn)
-	result := nn.Result()
+	nn.forward(aIn)
+	result := nn.result()
 	r, _ := result.Dims()
 	max = 0.0
 	maxIndex = 0
@@ -59,7 +55,7 @@ func (nn *NeuralNetwork) Train(dataSet, expect []*mat.Dense) {
 			if j < 0 {
 				j = 0
 			}
-			nn.Backward(dataSet[j], expect[j])
+			nn.backward(dataSet[j], expect[j])
 		}
 	}
 }
@@ -72,7 +68,7 @@ func (nn *NeuralNetwork) LoadState(filename string) {
 
 }
 
-func (nn *NeuralNetwork) Forward(aIn mat.Matrix) {
+func (nn *NeuralNetwork) forward(aIn mat.Matrix) {
 	nn.A[0] = mat.DenseCopyOf(aIn)
 
 	for i := 1; i < nn.Count; i++ {
@@ -93,14 +89,14 @@ func (nn *NeuralNetwork) Forward(aIn mat.Matrix) {
 	}
 }
 
-func (nn *NeuralNetwork) Backward(aIn, aOut mat.Matrix) {
-	nn.Forward(aIn)
+func (nn *NeuralNetwork) backward(aIn, aOut mat.Matrix) {
+	nn.forward(aIn)
 
 	lastLayerNum := nn.Count - 1
 
 	//Initial error
 	err := &mat.Dense{}
-	err.Sub(nn.Result(), aOut)
+	err.Sub(nn.result(), aOut)
 
 	sigmoidsPrime := &mat.Dense{}
 	sigmoidsPrime.Apply(applySigmoidPrime, nn.Z[lastLayerNum])
@@ -145,11 +141,6 @@ func (nn *NeuralNetwork) Backward(aIn, aOut mat.Matrix) {
 	nn.Weights = newWeights
 }
 
-func makeBackGradien(in mat.Matrix, actual mat.Matrix, alpha float64) *mat.Dense {
-	scaled := &mat.Dense{}
-	result := &mat.Dense{}
-
-	scaled.Scale(alpha, in)
-	result.Sub(actual, scaled)
-	return result
+func (nn *NeuralNetwork) result() *mat.Dense {
+	return nn.A[nn.Count-1]
 }