-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathactivation.go
95 lines (80 loc) · 1.34 KB
/
activation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package neat
import (
"math"
"strings"
)
type Activation interface {
Activate(float64) float64
GetString() string
}
// Linear
type Linear struct{}
func (act *Linear) Activate(n float64) float64 {
return n
}
func (act *Linear) GetString() string {
return "linear"
}
// Relu
type Relu struct{}
func (act *Relu) Activate(n float64) float64 {
if n > 0 {
return n
}
return 0
}
func (act *Relu) GetString() string {
return "relu"
}
// Sigmoid
type Sigmoid struct{}
func (act *Sigmoid) Activate(n float64) float64 {
return 1.0 / (1.0 + math.Exp(-n))
}
func (act *Sigmoid) GetString() string {
return "sigmoid"
}
// Tanh
type Tanh struct{}
func (act *Tanh) Activate(n float64) float64 {
return math.Tanh(n)
}
func (act *Tanh) GetString() string {
return "tanh"
}
// Sin
type Sin struct{}
func (act *Sin) Activate(n float64) float64 {
return math.Sin(n)
}
func (act *Sin) GetString() string {
return "sin"
}
type Sig struct{}
func (act *Sig) Activate(n float64) float64 {
if n > 0 {
return 1
}
if n < 0 {
return -1
}
return 0
}
func (act *Sig) GetString() string {
return "sig"
}
func GetActivation(name string) Activation {
switch strings.ToLower(name) {
case "linear":
return &Linear{}
case "sigmoid":
return &Sigmoid{}
case "tanh":
return &Tanh{}
case "sin":
return &Sin{}
case "sig":
return &Sig{}
}
return &Relu{}
}