neuron

package module
v0.0.0-...-5db9eb4 Latest Latest
Warning

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

Go to latest
Published: Jan 4, 2024 License: MIT Imports: 3 Imported by: 0

README

neuron

Группа для вопросов: https://t.me/+GZS7XPBxQ4FmNzMy

Содержимое репозитория

  • Классификатор (neuron.go), моделирующий ассоциативную вероятностную импульсную нейронную сеть прямого распространения.
    В сети два слоя:

    • входной - признаки
    • выходной - классы

    Каждая связь в сети пропускает импульс с вероятностью, рассчитанной по теореме Байеса:
    W[n,m]=Pr(Class[m]|Feature[n])
    Выходной нейрон срабатывает с вероятностью:
    Pr(Class[m]|W[1,m] + W[2,m] + ... + W[n,m])
    рассчитанной по теореме сложения вероятностей совместных независимых событий:
    Pr(A+B)=Pr(A)+Pr(B)-Pr(A*B)

    Сеть так же может иметь три слоя. В среднем слое нейроны (детекторы) выполняют функцию: Pr(A*B)=Pr(A)*Pr(B)
    На вход эти нейроны могут получать инвертированные признаки. В сравнении с персептроном сеть выглядит так: alt text

    Помимо пресинаптической пластичности, которая используется в данном классификаторе, возможна и постсинаптическая. Как AND нейрон распределяет свои выходы (вес исходящей связи / вес нейрона), так и OR нейрон может распределять свои входы (вес входящей связи / вес нейрона). Эти виды пластичности могут использоваться как по отдельности, так и одновременно при взаимодействии AND и OR нейронов, например, как в этом коде: https://github.com/tsukanov-as/neuron/blob/a25f34aeadd1a77c2febf73ae99774e5c7558191/neuron.go#L64

  • Модель вероятностного импульсного нейрона (model.go, черновик)
    Главная идея в том, что вещественные числа между нейронами передавать не требуется, их роль выполняет вероятность события.

    https://user-images.githubusercontent.com/17392154/234543158-f794cee9-6d06-47bc-9c18-a63ced5a5124.mp4

$ git clone https://github.com/tsukanov-as/neuron.git && cd neuron
$ go test -v -count=1 ./... -run ^TestModel$
$ go test -v -count=1 ./... -run ^TestAssociation$
$ go test -v -count=1 ./... -run ^TestDetection$
$ go test -v -count=1 ./... -run ^TestDetection2$

Documentation

Index

Constants

View Source
const CassetteSize = 10

Variables

This section is empty.

Functions

This section is empty.

Types

type Classifier

type Classifier struct {
	// contains filtered or unexported fields
}

func New

func New(classes, features int) *Classifier

func (*Classifier) ClassProbs

func (c *Classifier) ClassProbs(class int) ([]float64, error)

func (*Classifier) Detect

func (c *Classifier) Detect(fv []float64) ([]float64, error)

func (*Classifier) Detect2

func (c *Classifier) Detect2(fv []float64) ([]float64, error)

func (*Classifier) FeatureProbs

func (c *Classifier) FeatureProbs(feature int) ([]float64, error)

func (*Classifier) Learn

func (c *Classifier) Learn(class int, fv []float64) error

func (*Classifier) Learn2

func (c *Classifier) Learn2(class int, cv float64, fv []float64) error

experimental

func (*Classifier) Predict

func (c *Classifier) Predict(fv []float64) ([]float64, error)

analogue of naive Bayes classifier

type Neuron

type Neuron struct {
	Label    string
	Type     Type
	Stress   float64
	Limit    float64
	Weight   float64
	Timer    int
	Cassette int
	Incoming []*Wire
	Outgoing []*Wire
}

func NewNeuron

func NewNeuron(t Type, label string, w float64) *Neuron

func (*Neuron) DependsOn

func (n *Neuron) DependsOn(src *Neuron, w float64)

func (*Neuron) Kick

func (n *Neuron) Kick()

func (*Neuron) Tick

func (n *Neuron) Tick()

type TwoLayerNetwork

type TwoLayerNetwork struct {
	Input  []*Neuron
	Output []*Neuron
}

func (TwoLayerNetwork) Tick

func (nn TwoLayerNetwork) Tick()

type Type

type Type int
const (
	OR  Type = 0
	XOR Type = 1
	AND Type = 2
)

type Wire

type Wire struct {
	Impulse bool
	Weight  float64
	Src     *Neuron
	Dst     *Neuron
}

func (*Wire) Tick

func (w *Wire) Tick()

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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