Skip to content

Commit c7c7bf2

Browse files
authored
Merge pull request #76 from victorKariuki/main
Added hisabati.random and created perceptron example
2 parents 9a9bd40 + 3f52200 commit c7c7bf2

File tree

2 files changed

+159
-1
lines changed

2 files changed

+159
-1
lines changed

examples/perceptron.nr

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
tumia hisabati
2+
3+
// Kuanzisha uzani bila mpangilio
4+
fanya mizani = [
5+
hisabati.random() * 2 - 1,
6+
hisabati.random() * 2 - 1,
7+
hisabati.random() * 2 - 1
8+
];
9+
10+
// Undo la uanzishaji wa Sigmoid
11+
fanya sigmoid = unda(vekta) {
12+
fanya tokeo = [];
13+
kwa v ktk vekta {
14+
tokeo.sukuma(1 / (1 + hisabati.exp(-1 * v)));
15+
}
16+
rudisha tokeo;
17+
}
18+
19+
// Derivative ya undo la sigmoid
20+
fanya sigmoidDerivative = unda(vekta) {
21+
fanya tokeo = [];
22+
kwa v ktk vekta {
23+
tokeo.sukuma(v * (1 - v));
24+
}
25+
26+
rudisha tokeo;
27+
}
28+
29+
fanya kuzidishaTumboVekta = unda(tumbo, vekta) {
30+
fanya tokeo = [];
31+
kwa row ktk tumbo {
32+
fanya jamii = 0;
33+
kwa j, kipengee ktk row {
34+
jamii += kipengee * vekta[j];
35+
}
36+
tokeo.sukuma(jamii);
37+
}
38+
rudisha tokeo;
39+
}
40+
41+
fanya zidishaKwaNukta = unda(safu1, safu2) {
42+
// Angalia ikiwa safu zina urefu sawa
43+
kama (safu1.idadi() != safu2.idadi()) {
44+
andika("Safu lazima ziwe na urefu sawa kwa kuzidisha kwa busara ya kipengele.");
45+
}
46+
47+
// Perform element-wise multiplication
48+
fanya tokeo = [];
49+
kwa i, kipengee ktk safu1 {
50+
tokeo.sukuma(kipengee * safu2[i]);
51+
}
52+
rudisha tokeo;
53+
}
54+
55+
// Songa mbele kupitia mtandao wa neva
56+
fanya waza = unda(pembejeo, mizani) {
57+
fanya jumlaYaUzani = sigmoid(kuzidishaTumboVekta(pembejeo, mizani));
58+
rudisha jumlaYaUzani;
59+
}
60+
61+
// Funza mtandao wa neva
62+
fanya funza = unda(mizani, mafunzoPembejeo, matokeoYaMafunzo, marudioYaMafunzo) {
63+
fanya kurudia = 0
64+
65+
andika('mafunzoPembejeo: ');
66+
andika(mafunzoPembejeo);
67+
68+
andika('matokeoYaMafunzo: ');
69+
andika(matokeoYaMafunzo);
70+
71+
72+
73+
wakati (kurudia < marudioYaMafunzo) {
74+
andika('kurudia: ');
75+
andika(kurudia);
76+
// Pitisha mafunzo yaliyowekwa kupitia mtandao wa neva
77+
fanya pato = waza(mafunzoPembejeo, mizani);
78+
79+
andika('pato: ');
80+
andika(pato);
81+
// Kuhesabu kiwango cha makosa
82+
fanya upungufu = [];
83+
kwa i, kipengee ktk matokeoYaMafunzo {
84+
upungufu.sukuma(kipengee - pato[i]);
85+
}
86+
87+
fanya sigmoidDerivative = sigmoidDerivative(pato)
88+
89+
andika('upungufu: ');
90+
andika(upungufu);
91+
92+
andika('sigmoidDerivative tokeo: ');
93+
andika(sigmoidDerivative);
94+
95+
fanya zidishaKwaNukta = zidishaKwaNukta(upungufu, sigmoidDerivative);
96+
97+
andika('zidishaKwaNukta tokeo: ');
98+
andika(zidishaKwaNukta);
99+
100+
// Kuzidisha makosa kwa pembejeo na upinde rangi ya kitendakazi cha sigmoid
101+
// Uzito mdogo wa ujasiri hurekebishwa zaidi kupitia asili ya kazi
102+
fanya marekebisho = kuzidishaTumboVekta(mafunzoPembejeo, zidishaKwaNukta);
103+
andika('marekebisho tokeo: ');
104+
andika(marekebisho);
105+
106+
107+
// Rekebisha uzani
108+
kwa i, j ktk mizani {
109+
mizani[i] = mizani[i] + marekebisho[i];
110+
}
111+
112+
andika('mizani mpya: ');
113+
andika(mizani);
114+
kurudia++
115+
}
116+
rudisha mizani;
117+
}
118+
119+
120+
121+
andika('Mizani ya Kuanzisha isiyo na mpangilio: ');
122+
andika(mizani);
123+
124+
// Seti ya mafunzo
125+
fanya mafunzoPembejeo = [[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]];
126+
fanya matokeoYaMafunzo = [0, 1, 1, 0];
127+
128+
// Funza mtandao wa neva
129+
fanya mafunzoMizani = funza(mizani, mafunzoPembejeo, matokeoYaMafunzo, 10000);
130+
131+
andika('Mizani baada ya mafunzo:');
132+
andika(mafunzoMizani);
133+
134+
// Ingizo la mtumiaji kwa hali mpya
135+
fanya A = 1;
136+
fanya B = 0;
137+
fanya C = 0;
138+
139+
andika('Hali mpya: data ya pembejeo = ', A, B, C);
140+
andika('Data ya pato:');
141+
andika(waza([[A, B, C]], mafunzoMizani));

module/hisabati.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package module
22

33
import (
44
"math"
5-
5+
"math/rand"
6+
"time"
67
"github.com/AvicennaJr/Nuru/object"
78
)
89

@@ -28,6 +29,7 @@ var MathFunctions = map[string]object.ModuleFunction{
2829
"cbrt": cbrt,
2930
"root": root,
3031
"hypot": hypot,
32+
"random": random,
3133
"factorial":factorial,
3234
"round": round,
3335
"max": max,
@@ -710,4 +712,19 @@ func atanh(args []object.Object, defs map[string]object.Object) object.Object {
710712
}
711713
num := args[0].(*object.Float).Value
712714
return &object.Float{Value: math.Atanh(num)}
715+
}
716+
717+
func random(args []object.Object, defs map[string]object.Object) object.Object {
718+
if len(defs) != 0 {
719+
return &object.Error{Message: "Undo hili haliruhusu ufafanuzi."}
720+
}
721+
722+
if len(args) != 0 {
723+
return &object.Error{Message: "Undo hili halipaswi kupokea hoja."}
724+
}
725+
726+
rand.Seed(time.Now().UnixNano())
727+
value := rand.Float64()
728+
729+
return &object.Float{Value: value}
713730
}

0 commit comments

Comments
 (0)