layer

package
v0.0.0-...-90badf6 Latest Latest
Warning

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

Go to latest
Published: Jan 1, 2025 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 LSTMOptionFunc

type LSTMOptionFunc func(*LSTMT)

func WithLSTMSource

func WithLSTMSource(s randv2.Source) LSTMOptionFunc

type LSTMT

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

func LSTM

func LSTM(hiddenSize int, opts ...LSTMOptionFunc) *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.WithLSTMSource(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.WithLSTMSource(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 LinearT

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

func Linear

func Linear(outSize int, opts ...OptionFunc) *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.WithSource(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.WithSource(rand.Const()),
		L.WithInSize(3),
	)

	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.WithNoBias())

	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 OptionFunc

type OptionFunc func(*LinearT)

func WithInSize

func WithInSize(inSize int) OptionFunc

func WithNoBias

func WithNoBias() OptionFunc

func WithSource

func WithSource(s randv2.Source) OptionFunc

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) Delete

func (p Parameters) Delete(name string)

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 RNNOptionFunc

type RNNOptionFunc func(*RNNT)

func WithRNNSource

func WithRNNSource(s randv2.Source) RNNOptionFunc

type RNNT

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

func RNN

func RNN(hiddenSize int, opts ...RNNOptionFunc) *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.WithRNNSource(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.WithRNNSource(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