Browse Source

Updated flow

luis 6 years ago
parent
commit
f36eda26c3
2 changed files with 1 additions and 146 deletions
  1. 0 145
      go/src/demos/cmd/xor/main.go
  2. 1 1
      go/src/github.com/hexasoftware/flow

+ 0 - 145
go/src/demos/cmd/xor/main.go

@@ -1,145 +0,0 @@
-package main
-
-import (
-	"demos/ops/ml"
-	"flag"
-	"fmt"
-	"log"
-	"os"
-	"runtime/pprof"
-
-	"github.com/hexasoftware/flow"
-	"gonum.org/v1/gonum/mat"
-)
-
-var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
-var memprofile = flag.String("memprofile", "", "write mem profile to file")
-
-func main() {
-	flag.Parse()
-
-	if *cpuprofile != "" {
-		f, err := os.Create(*cpuprofile)
-		if err != nil {
-			log.Fatal(err)
-		}
-		pprof.StartCPUProfile(f)
-		defer pprof.StopCPUProfile()
-	}
-	if *memprofile != "" {
-		f, err := os.Create(*memprofile)
-		if err != nil {
-			log.Fatal(err)
-		}
-		defer pprof.WriteHeapProfile(f)
-	}
-	// Registry for machine learning
-	r := ml.New()
-
-	f := flow.New()
-	f.UseRegistry(r)
-
-	samples := []float64{
-		0, 0,
-		0, 1,
-		1, 0,
-		1, 1,
-	}
-	labels := []float64{
-		0,
-		1,
-		1,
-		0,
-	}
-	learningRate := float64(0.3)
-
-	nInputs := 2
-	nHidden := 5
-	nOutput := 1
-	nSamples := 4
-
-	matSamples := mat.NewDense(nSamples, 2, samples)
-	matLabels := mat.NewDense(nSamples, 1, labels)
-
-	// Define input
-	// Make a matrix out of the input and output
-	x := f.In(0)
-	y := f.In(1)
-
-	// [ 1, 2, 3, 4, 5]
-	// [ 1, 2, 3, 4, 5]
-	wHidden := f.Var("wHidden", f.Op("matNewRand", nInputs, nHidden))
-
-	// [ 1 ]
-	// [ 2 ]
-	// [ 3 ]
-	// [ 4 ]
-	// [ 5 ]
-	wOut := f.Var("wOut", f.Op("matNewRand", nHidden, nOutput))
-
-	// Forward process
-	hiddenLayerInput := f.Op("matMul", x, wHidden)
-	hiddenLayerActivations := f.Op("matSigmoid", hiddenLayerInput)
-	outputLayerInput := f.Op("matMul", hiddenLayerActivations, wOut)
-	// Activations
-	output := f.Op("matSigmoid", outputLayerInput)
-
-	// Back propagation
-	// output weights
-	networkError := f.Op("matSub", y, output)
-	slopeOutputLayer := f.Op("matSigmoidPrime", output)
-	dOutput := f.Op("matMulElem", networkError, slopeOutputLayer)
-	wOutAdj := f.Op("matScale",
-		learningRate,
-		f.Op("matMul", f.Op("matTranspose", hiddenLayerActivations), dOutput),
-	)
-
-	// hidden weights
-	errorAtHiddenLayer := f.Op("matMul", dOutput, f.Op("matTranspose", wOut))
-	slopeHiddenLayer := f.Op("matSigmoidPrime", hiddenLayerActivations)
-	dHiddenLayer := f.Op("matMulElem", errorAtHiddenLayer, slopeHiddenLayer)
-	wHiddenAdj := f.Op("matScale",
-		learningRate,
-		f.Op("matMul", f.Op("matTranspose", x), dHiddenLayer),
-	)
-
-	// Adjust the parameters
-	setwOut := f.SetVar("wOut", f.Op("matAdd", wOut, wOutAdj))
-	setwHidden := f.SetVar("wHidden", f.Op("matAdd", wHidden, wHiddenAdj))
-
-	// Training
-	for i := 0; i < 5000; i++ {
-		sess := f.NewSession()
-		sess.Inputs(matSamples, matLabels)
-		_, err := sess.Run(setwOut, setwHidden)
-		if err != nil {
-			log.Fatal(err)
-		}
-	}
-
-	// Same as above because its simple
-	testSamples := matSamples
-	testLabels := matLabels
-
-	res, err := output.Process(testSamples)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	predictions := res.(mat.Matrix)
-	log.Println("Predictions", predictions)
-
-	var rights int
-	numPreds, _ := predictions.Dims()
-	log.Println("Number of predictions:", numPreds)
-	for i := 0; i < numPreds; i++ {
-		if predictions.At(i, 0) > 0.5 && testLabels.At(i, 0) == 1.0 ||
-			predictions.At(i, 0) < 0.5 && testLabels.At(i, 0) == 0 {
-			rights++
-		}
-	}
-
-	accuracy := float64(rights) / float64(numPreds)
-	fmt.Printf("\nAccuracy = %0.2f\n\n", accuracy)
-
-}

+ 1 - 1
go/src/github.com/hexasoftware/flow

@@ -1 +1 @@
-Subproject commit 9c36a1c5e48de80ad1492c36d6b2b8c86e751492
+Subproject commit 20b96de276392ff4c726ec199b3bf7b716b2fc8e