package main import ( "fmt" neuralnetwork "./neuralnetworkbase" mat "gonum.org/v1/gonum/mat" ) func main() { dataSet, result := readData("./iris.data") sizes := []int{4, 8, 3} nn := neuralnetwork.NewNeuralNetwork(sizes) 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 j := 0; j < 150; j++ { for i := 0; i < len(dataSet); i++ { // fmt.Printf("Dataset[%d]:\n%v\n\n", i, mat.Formatted(dataSet[i], mat.Prefix(""), mat.Excerpt(0))) // fmt.Printf("Result[%d]:\n%v\n\n", i, mat.Formatted(result[i], mat.Prefix(""), mat.Excerpt(0))) nn.Backward(dataSet[i], result[i]) } } 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() // } // aIn := mat.NewDense(sizes[0], 1, data) failCount := 0 for i := 0; i < len(dataSet); i++ { index, _ := nn.Predict(dataSet[i]) if result[i].At(index, 0) != 1.0 { failCount++ fmt.Printf("Fail: %v, %v\n\n", i, result[i].At(index, 0)) } } fmt.Printf("Fail count: %v\n\n", failCount) }