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  }