-
Notifications
You must be signed in to change notification settings - Fork 0
/
data.go
87 lines (74 loc) · 2.31 KB
/
data.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
package gonn
type synapseData struct {
Weight float64
In float64
Out float64
}
type neuronData struct {
Bias synapseData
Synapses []synapseData
Z float64
A float64
}
type layerData struct {
Neurons []neuronData
}
type networkData struct {
Options map[int32]interface{}
Layers []layerData
}
func buildNetworkDto(n *network) *networkData {
nd := networkData{
Options: n.options,
}
for i := range n.layers {
nd.Layers = append(nd.Layers, layerData{})
for j := range n.layers[i].neurons {
nd.Layers[i].Neurons = append(nd.Layers[i].Neurons, neuronData{})
nd.Layers[i].Neurons[j].Bias.Weight = n.layers[i].neurons[j].bias.weight
nd.Layers[i].Neurons[j].Bias.In = n.layers[i].neurons[j].bias.in
nd.Layers[i].Neurons[j].Bias.Out = n.layers[i].neurons[j].bias.out
for k := range n.layers[i].neurons[j].synapses {
nd.Layers[i].Neurons[j].Synapses = append(nd.Layers[i].Neurons[j].Synapses, synapseData{})
nd.Layers[i].Neurons[j].Synapses[k].Weight = n.layers[i].neurons[j].synapses[k].weight
nd.Layers[i].Neurons[j].Synapses[k].In = n.layers[i].neurons[j].synapses[k].in
nd.Layers[i].Neurons[j].Synapses[k].Out = n.layers[i].neurons[j].synapses[k].out
}
nd.Layers[i].Neurons[j].A = n.layers[i].neurons[j].a
nd.Layers[i].Neurons[j].Z = n.layers[i].neurons[j].z
}
}
return &nd
}
// NewNetworkFromData loads a network from a networkData struct
func NewNetworkFromData(nd *networkData) *network {
n := network{
options: nd.Options,
layers: make([]*layer, len(nd.Layers)),
}
for i := range nd.Layers {
n.layers[i] = &layer{
neurons: make([]*neuron, len(nd.Layers[i].Neurons)),
}
for j := range n.layers[i].neurons {
n.layers[i].neurons[j] = &neuron{
synapses: make([]*synapse, len(nd.Layers[i].Neurons[j].Synapses)),
bias: &synapse{
weight: nd.Layers[i].Neurons[j].Bias.Weight,
in: nd.Layers[i].Neurons[j].Bias.In,
out: nd.Layers[i].Neurons[j].Bias.Out,
},
z: nd.Layers[i].Neurons[j].Z,
a: nd.Layers[i].Neurons[j].A,
}
for k := range n.layers[i].neurons[j].synapses {
n.layers[i].neurons[j].synapses[k] = &synapse{
weight: nd.Layers[i].Neurons[j].Synapses[k].Weight,
in: nd.Layers[i].Neurons[j].Synapses[k].In,
out: nd.Layers[i].Neurons[j].Synapses[k].Out,
}
}
}
}
return &n
}