gorgonia.org/gorgonia@v0.9.17/example_autodiff_test.go (about) 1 package gorgonia_test 2 3 import ( 4 "fmt" 5 "log" 6 7 . "gorgonia.org/gorgonia" 8 ) 9 10 // Autodiff showcases automatic differentiation 11 func Example_autodiff() { 12 g := NewGraph() 13 14 var x, y, z *Node 15 var err error 16 17 // define the expression 18 x = NewScalar(g, Float64, WithName("x")) 19 y = NewScalar(g, Float64, WithName("y")) 20 if z, err = Add(x, y); err != nil { 21 log.Fatal(err) 22 } 23 24 // set initial values then run 25 Let(x, 2.0) 26 Let(y, 2.5) 27 28 // by default, LispMachine performs forward mode and backwards mode execution 29 m := NewLispMachine(g) 30 defer m.Close() 31 if err = m.RunAll(); err != nil { 32 log.Fatal(err) 33 } 34 35 fmt.Printf("z: %v\n", z.Value()) 36 37 if xgrad, err := x.Grad(); err == nil { 38 fmt.Printf("dz/dx: %v\n", xgrad) 39 } 40 41 if ygrad, err := y.Grad(); err == nil { 42 fmt.Printf("dz/dy: %v\n", ygrad) 43 } 44 45 // Output: 46 // z: 4.5 47 // dz/dx: 1 48 // dz/dy: 1 49 }