layer

package
v0.0.0-...-a3b61a5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 5, 2024 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type LSTMOpts

type LSTMOpts struct {
	Source randv2.Source
}

type LSTMT

type LSTMT struct {
	Layers
	// contains filtered or unexported fields
}

func LSTM

func LSTM(hiddenSize int, opts ...LSTMOpts) *LSTMT
Example
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/rand"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.LSTM(2, L.LSTMOpts{
		Source: rand.Const(),
	})

	x := variable.New(1)
	y := l.Forward(x)
	fmt.Printf("%.4f\n", y[0].Data)

	for k, v := range l.Params() {
		fmt.Println(k, v.Data)
	}

}
Output:

[[-0.1159 0.3410]]
h2i.w [[0.7721305559619605 -0.3138383577766621] [-0.1774465290440516 0.6058784343349307]]
h2u.w [[-0.1863471272377204 -0.2731476909916124] [-0.22971366432393717 -0.9748342951297205]]
x2f.b [[0 0]]
x2i.b [[0 0]]
x2i.w [[0.6683845105491564 0.5224173744445297]]
x2u.w [[-0.3459245000660268 2.3596405779473866]]
h2f.w [[0.4006014980172961 -0.4330302800303532] [0.4171185512277987 -0.260091010167568]]
x2f.w [[1.4794951368388003 -0.7850500761442023]]
x2o.b [[0 0]]
x2o.w [[0.14228008038102535 0.49557472469859015]]
x2u.b [[0 0]]
h2o.w [[0.5131618329299671 0.6022410956921772] [-1.4567160689766936 -0.4395064776168111]]
Example (Backward)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/rand"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.LSTM(2, L.LSTMOpts{
		Source: rand.Const(),
	})

	x := variable.New(1)
	y := l.First(x)
	y.Backward()

	y = l.First(x)
	y.Backward()

	for k, v := range l.Params() {
		fmt.Println(k, v.Grad)
	}

}
Output:

x2o.b variable([-0.1467619739042175 0.3035778427291682])
x2o.w variable([-0.1467619739042175 0.3035778427291682])
x2u.b variable([0.6280410802257455 0.024737661571790713])
h2i.w variable([[0.0034706005215721916 -0.007235676351057161] [-0.010207401373028816 0.02128088561662388]])
x2f.b variable([-0.010462855229162323 0.038890543079566985])
x2i.b variable([-0.086848478802109 0.18688211132241805])
x2i.w variable([-0.086848478802109 0.18688211132241805])
x2u.w variable([0.6280410802257455 0.024737661571790713])
h2f.w variable([[0.0012131372656231042 -0.004509243992848472] [-0.003567964366346655 0.013262161126822158]])
h2o.w variable([[0.01106944986063837 -0.019636718150272264] [-0.03255641696698899 0.05775365460904995]])
h2u.w variable([[-0.020773992595966805 -0.001484667253885979] [0.06109849843833466 0.0043665626371028115]])
x2f.w variable([-0.010462855229162323 0.038890543079566985])
Example (Cleargrads)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.LSTM(3)

	x := variable.New(1)
	y := l.First(x)
	y.Backward()

	l.Cleargrads()
	for k, v := range l.Params() {
		fmt.Println(k, v.Grad)
	}

}
Output:

x2f.w <nil>
x2f.b <nil>
x2i.w <nil>
x2i.b <nil>
x2o.w <nil>
x2o.b <nil>
x2u.w <nil>
x2u.b <nil>
h2f.w <nil>
h2i.w <nil>
h2o.w <nil>
h2u.w <nil>

func (*LSTMT) First

func (l *LSTMT) First(x ...*variable.Variable) *variable.Variable

func (*LSTMT) Forward

func (l *LSTMT) Forward(x ...*variable.Variable) []*variable.Variable

func (*LSTMT) ResetState

func (l *LSTMT) ResetState()
Example
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.LSTM(3)

	x := variable.New(1)
	l.Forward(x)   // set hidden state
	l.ResetState() // reset hidden state
	l.Forward(x)   // h2h is not used

	for k := range l.Params() {
		fmt.Println(k)
	}

}
Output:

x2f.w
x2f.b
x2i.w
x2i.b
x2o.w
x2o.b
x2u.w
x2u.b
h2f.w
h2i.w
h2o.w
h2u.w

type Layer

type Layer interface {
	First(x ...*variable.Variable) *variable.Variable
	Forward(x ...*variable.Variable) []*variable.Variable
	Params() Parameters
	Cleargrads()
}

type Layers

type Layers map[string]Layer

func (Layers) Add

func (l Layers) Add(name string, layer Layer)

func (Layers) Cleargrads

func (l Layers) Cleargrads()

func (Layers) Params

func (l Layers) Params() Parameters

type LinearOpts

type LinearOpts struct {
	InSize int
	NoBias bool
	Source randv2.Source
}

type LinearT

type LinearT struct {
	Parameters
	// contains filtered or unexported fields
}

func Linear

func Linear(outSize int, opts ...LinearOpts) *LinearT
Example
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/rand"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.Linear(5, L.LinearOpts{
		Source: rand.Const(),
	})

	x := variable.New(1, 2, 3)
	y := l.Forward(x)
	fmt.Printf("%.4f\n", y[0].Data)

	for _, v := range l.Params() {
		fmt.Println(v)
	}

}
Output:

[[-3.7536 -1.7199 0.8735 -0.0434 1.0512]]
b([0 0 0 0 0])
w([[0.32708975344564756 -0.35356774308295924 0.34057587091902425 -0.21236342053185778 0.630441958972765] [-0.25624794608861706 -0.1448844842619606 0.4946976700923148 0.41899488204992313 0.49172779552683027] [-1.1894036897019482 -0.3588555362697145 -0.15215179225530268 -0.2230241557829546 -0.18756042151287408]])
Example (Backward)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.Linear(5)

	x := variable.New(1, 2, 3)
	y := l.Forward(x)
	y[0].Backward()

	for _, v := range l.Params() {
		fmt.Println(v.Name, v.Grad)
	}

	y = l.Forward(variable.New(1, 2, 3))
	y[0].Backward()

	for _, v := range l.Params() {
		fmt.Println(v.Name, v.Grad)
	}

}
Output:

b variable([1 1 1 1 1])
w variable([[1 1 1 1 1] [2 2 2 2 2] [3 3 3 3 3]])
b variable([2 2 2 2 2])
w variable([[2 2 2 2 2] [4 4 4 4 4] [6 6 6 6 6]])
Example (InSize)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/rand"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.Linear(5, L.LinearOpts{
		InSize: 3,
		Source: rand.Const(),
	})

	x := variable.New(1, 2, 3)
	y := l.Forward(x)
	fmt.Printf("%.4f\n", y[0].Data)

	for _, v := range l.Params() {
		fmt.Println(v)
	}

}
Output:

[[-3.7536 -1.7199 0.8735 -0.0434 1.0512]]
b([0 0 0 0 0])
w([[0.32708975344564756 -0.35356774308295924 0.34057587091902425 -0.21236342053185778 0.630441958972765] [-0.25624794608861706 -0.1448844842619606 0.4946976700923148 0.41899488204992313 0.49172779552683027] [-1.1894036897019482 -0.3588555362697145 -0.15215179225530268 -0.2230241557829546 -0.18756042151287408]])
Example (Nobias)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.Linear(5, L.LinearOpts{
		NoBias: true,
	})

	x := variable.New(1, 2, 3)
	l.Forward(x)

	for _, v := range l.Params() {
		fmt.Println(v.Name)
	}

}
Output:

w

func (*LinearT) First

func (l *LinearT) First(x ...*variable.Variable) *variable.Variable

func (*LinearT) Forward

func (l *LinearT) Forward(x ...*variable.Variable) []*variable.Variable

type Parameter

type Parameter = *variable.Variable

type Parameters

type Parameters map[string]Parameter

func (Parameters) Add

func (p Parameters) Add(name string, param Parameter)

func (Parameters) Cleargrads

func (p Parameters) Cleargrads()
Example
package main

import (
	"fmt"

	"github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	v := variable.New(1, 2)
	v.Grad = variable.New(3, 4)

	p := make(layer.Parameters)
	p.Add("w", v)
	p.Cleargrads()

	for _, v := range p {
		fmt.Println(v, v.Grad)
	}

}
Output:

w([1 2]) <nil>

func (Parameters) Params

func (p Parameters) Params() Parameters
Example
package main

import (
	"fmt"

	"github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	p := make(layer.Parameters)
	p.Add("w", variable.New(1, 2))
	p.Add("b", variable.New(3, 4))

	for _, v := range p.Params() {
		fmt.Println(v)
	}

}
Output:

w([1 2])
b([3 4])

type RNNOpts

type RNNOpts struct {
	Source randv2.Source
}

type RNNT

type RNNT struct {
	Layers
	// contains filtered or unexported fields
}

func RNN

func RNN(hiddenSize int, opts ...RNNOpts) *RNNT
Example
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/rand"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.RNN(2, L.RNNOpts{
		Source: rand.Const(),
	})

	x := variable.New(1)
	y := l.Forward(x)
	fmt.Printf("%.4f\n", y[0].Data)

	for k, v := range l.Params() {
		fmt.Println(k, v.Data)
	}

}
Output:

[[0.7976 -0.4168]]
x2h.b [[0 0]]
x2h.w [[1.0919575041640825 -0.4438344619606553]]
h2h.w [[0.4006014980172961 -0.4330302800303532] [0.4171185512277987 -0.260091010167568]]
Example (Backward)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/rand"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.RNN(2, L.RNNOpts{
		Source: rand.Const(),
	})

	x := variable.New(1)
	y := l.First(x)
	y.Backward()

	for k, v := range l.Params() {
		fmt.Println(k, v.Grad)
	}
	fmt.Println(".")

	y = l.First(x)
	y.Backward()

	for k, v := range l.Params() {
		fmt.Println(k, v.Grad)
	}

}
Output:

h2h.w <nil>
x2h.w variable([0.3638478140516499 0.8262629446866991])
x2h.b variable([0.3638478140516499 0.8262629446866991])
.
x2h.w variable([0.5896143925532906 1.4348651282031906])
h2h.w variable([[0.22839718521198515 0.5180241623919872] [-0.11935935508160048 -0.2707171276318745]])
x2h.b variable([0.5896143925532906 1.4348651282031906])
Example (Cleargrads)
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.RNN(3)

	x := variable.New(1)
	y := l.First(x)
	y.Backward()

	l.Cleargrads()
	for k, v := range l.Params() {
		fmt.Println(k, v.Grad)
	}

}
Output:

x2h.w <nil>
x2h.b <nil>
h2h.w <nil>

func (*RNNT) First

func (l *RNNT) First(x ...*variable.Variable) *variable.Variable

func (*RNNT) Forward

func (l *RNNT) Forward(x ...*variable.Variable) []*variable.Variable

func (*RNNT) ResetState

func (l *RNNT) ResetState()
Example
package main

import (
	"fmt"

	L "github.com/itsubaki/autograd/layer"
	"github.com/itsubaki/autograd/variable"
)

func main() {
	l := L.RNN(3)

	x := variable.New(1)
	l.Forward(x)   // set hidden state
	l.ResetState() // reset hidden state
	l.Forward(x)   // h2h is not used

	for _, v := range l.Params() {
		fmt.Println(v.Name)
	}

}
Output:

w
b
w

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL