-
Notifications
You must be signed in to change notification settings - Fork 0
/
BAI_MLP_eval.js
111 lines (100 loc) · 10.2 KB
/
BAI_MLP_eval.js
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//VERSION=3
function setup() {
return {
input: [{
bands: ["B04","B06","B07","B8A","B12"],
units: "reflectance"
}],
output: {
id:"default",
bands: 3
}
}
}
function evaluatePixel(sample) {
let BAI = ( 1 - (( sample.B06*sample.B07*sample.B8A )/ sample.B04 )**0.5)*( (sample.B12-sample.B8A) / ( (sample.B12+sample.B8A )**0.5 ) + 1 );
// Parameters:
const layers = [100, 1];
const weights = [[[-0.00918146794332132, 0.0012166762686055524, -0.9843919682832136, -0.03936815399743538, -0.005799940962305786, -0.6013278455452394, -0.06965196424004833, -0.0038071160288712766, -0.02433067947747196, -0.028660196243659983, -0.02226444824675905, 0.04421257482666366, -0.006061657007386299, 0.05285558958750406, -0.13880168901756298, 0.0005002257154140702, -0.00357665738592858, 0.00028875902847598045, -0.739834335215454, -0.10453233076723899, 0.07178883280538371, 0.10933446211676145, -0.06854516782141787, 0.045908114523173005, 0.0012199007578986732, 0.6165112917249636, -0.47820022938364554, -0.9129064421663954, -0.05858025227089848, 0.8062659491162021, -1.5659780126179474, -0.003318854729605437, 0.003037789373133769, 0.007916675298098218, 0.0004456257677310665, -0.03858262093662255, -0.0016447490511342412, 0.4879266181850814, -0.00635903463453019, 0.00196710346995494, 0.13174375582087453, 0.0592380529057288, -0.04823185358838171, 0.06905203786627348, -0.07844766215406689, -0.012438006624392607, 0.06938120341424478, -0.003248671607834238, -0.40667914388338794, -0.06345004854046003, -0.1493776619742183, 0.0014399128127840582, -1.4952018482385288, -0.029373489648558522, -0.002011517821138354, -0.8519504714572047, 0.017692144573162136, -0.513226390793441, -0.0025903088791892504, 0.0006855097578596609, -0.081472083855935, -0.38709016380668104, 0.0016383473668206345, -0.23788445696523322, -0.0869077786418016, 0.00856860389509795, 0.03909838322894654, 0.003033933332319211, 0.07328870093278562, 0.00015083338623871846, 0.3852499330756767, -0.006608037893698914, -0.6847307833360983, 0.40961943619314467, -0.5822038700593793, -0.6291651263182592, 0.0849702444979201, -0.0416989436884991, 0.05986976994100386, 0.5583131220483413, 0.0029133508989265134, 0.029521009919106223, 0.0015701182023431651, -0.051006730957058884, -0.07197691202874036, 0.002859403047156869, -0.01683434872065609, 0.0031096968445877256, 0.0009887782603068026, -4.099830080917042e-05, -0.09319442330719012, 0.8807575945705092, -0.0015999857470953905, -0.0008647318262188527, -0.0037620170650931634, -0.006070285178112592, 0.09642564152777268, 0.017587564002225924, -1.0014198146760136, -0.0025677771865010683]], [[0.10679794240030897], [0.000553902905687355], [0.406034339018588], [0.02508216467943856], [-0.0016593054934103276], [0.21275547714678947], [0.015084058006929984], [-0.0010892634688504082], [0.008650603919458282], [0.010185930997355637], [-0.025297278416490775], [0.11058246652862745], [-0.0017342305266804187], [0.016924261636938855], [-0.1117979007140807], [0.0002277539578168348], [-0.0010232708728762955], [0.00013147312192072466], [0.3034360048874101], [-0.13166070049893405], [-0.07729314272457231], [-0.040199422375584375], [-0.09383496850333944], [0.07387656458683835], [0.000555389064392021], [0.19463290695095523], [0.1971806132717652], [0.37683385446189194], [0.07126616126552175], [0.26158076368765887], [-0.860098110828582], [-0.0009494902514116806], [0.0013829736233525376], [-0.05114969688047282], [0.00020289910824279598], [0.017848626117872114], [-0.00047053036220924744], [0.1557434292868252], [-0.0018194059619202185], [0.0008955405382013467], [0.04121429467710861], [0.09378397731885307], [0.013711434503744364], [-0.07542792511091315], [0.05454043110766032], [0.02674225331246314], [-0.10239441859024724], [-0.000929391414045572], [0.16782449818843384], [0.08911071537102667], [-0.1456557197258288], [0.0006556239751043731], [-0.8215768891220814], [0.10760365532202586], [0.02499611779512594], [0.3528108571837132], [0.017833910496702333], [0.21220223712453384], [-0.0007410834158744457], [0.0003121563312285179], [0.04135683226621846], [0.159620008007864], [0.0007458720944206715], [0.08456630402905758], [0.0678627870862116], [-0.04232669712827901], [0.040767911456817615], [-0.011719347329518182], [0.023776055954938695], [6.866480107473651e-05], [0.12333930202828429], [-0.0018904730559209544], [0.24118769158848624], [0.13213711177442605], [0.24008669387013193], [0.25943329511362945], [0.027127841276019242], [-0.023252921248429502], [-0.037393827761199525], [0.174597245894801], [0.0013262416991077126], [0.09639855766737987], [0.0007148785583913621], [-0.057961550516621455], [-0.07114414734820976], [0.0013017715637013455], [0.006588098483578368], [0.0014157527921798221], [0.0004501478922389194], [-1.1729537534759507e-05], [-0.015305221183548453], [0.25386439267005323], [-0.0004577519648836858], [-0.0002473854474661519], [-0.0010763036771420076], [-0.001736692375054856], [-0.02914235566702319], [-0.10034479876649767], [0.4149281025857611], [-0.00073463462403711]]];
const bias = [[-0.08884059639037946, -0.00010656806569817853, 0.24206893535523877, -0.07220662832541154, 0.006120792270387649, 0.19463769794970645, -0.237808925126838, 0.004017732137414399, 0.020796766750534688, 0.024471474903274303, -0.15853109229928566, -0.17688423077372117, 0.006397003994373327, -0.020197747806636808, -0.20312161675945906, -4.379451982206562e-05, 0.0037745210977686372, -2.528015677489866e-05, 0.18195577548159397, -0.17252701867010728, -0.2340424363052336, -0.23619515582746212, -0.22204310674951974, -0.12371364784490692, -0.00010682854539049577, -0.23639092948896695, 0.11752714274827765, 0.2243738477767108, -0.18994746274465843, -0.3181084685522737, 0.2805284933551668, 0.003502451552703372, -0.00026591866492515375, -0.2346434069022539, -3.8997090892123315e-05, -0.13200137398803727, 0.0017357519233387217, -0.19254337093344004, 0.006710835613548789, -0.00017229903212229842, -0.05051310246278925, -0.17721596353194616, -0.21593471942909298, -0.1845824478168696, -0.22746819986003022, -0.19133353306706335, -0.20317668146676998, 0.003428447666764904, 0.09994767507056525, -0.24588574280367242, -0.19735925404738808, -0.0001260129940258878, 0.26786288975185435, -0.15372017158836984, -0.12073294657527105, 0.20935148597795072, -0.14846797912781845, 0.12624519155849642, 0.0027336118221802245, -5.99864715535233e-05, -0.13136166951334224, 0.09518828511311583, -0.00014350252209122805, 0.20254467391153413, -0.17418758187329994, -0.2346780595413247, -0.2095998773099632, -0.007749654043540821, -0.028910527568821138, -1.3223941860270882e-05, -0.14719916129304908, 0.006973526538797415, 0.22164135852147376, -0.14655594401842129, 0.14308807739963122, 0.15462705610688696, -0.033514401952040376, -0.11285794748617542, -0.21139731772151513, -0.21410303532440547, -0.0002554430774409782, -0.141280512649051, -0.00013746308183047747, -0.20638703082540957, -0.11127549973386638, -0.00025045073715388024, -0.14957936183077591, -0.0002723346598096048, -8.655449064185703e-05, 4.3266421041244176e-05, -0.11509086783752721, -0.3959938864576401, 0.0016884994130962451, 0.000912574878081299, 0.00397013749443413, 0.006406101277379396, -0.23671583321009093, -0.1294896314880621, 0.24625032176312156, 0.0027098304617583025], [0.4256208827175376]];
let features = BAI;
// Prediction:
var reg = new MLPRegressor('relu', layers, weights, bias);
var prediction = reg.predict(features);
return [prediction];
}
var MLPRegressor = function(hidden, layers, weights, bias) {
this.hidden = hidden.toUpperCase();
this.network = new Array(layers.length + 1);
for (var i = 0, l = layers.length; i < l; i++) {
this.network[i + 1] = new Array(layers[i]).fill(0.);
}
this.weights = weights;
this.bias = bias;
var compute = function(activation, v, nLayers) {
switch (activation) {
case 'LOGISTIC':
if (nLayers > 1) {
for (var i = 0, l = v.length; i < l; i++) {
v[i] = 1. / (1. + Math.exp(-v[i]));
}
} else {
for (var i = 0, l = v.length; i < l; i++) {
if (v[i] > 0) {
v[i] = -Math.log(1. + Math.exp(-v[i]));
} else {
v[i] = v[i] - Math.log(1. + Math.exp(-v[i]));
}
}
}
break;
case 'RELU':
for (var i = 0, l = v.length; i < l; i++) {
v[i] = Math.max(0, v[i]);
}
break;
case 'TANH':
for (var i = 0, l = v.length; i < l; i++) {
v[i] = Math.tanh(v[i]);
}
break;
case 'SOFTMAX':
var max = Number.NEGATIVE_INFINITY;
for (var i = 0, l = v.length; i < l; i++) {
if (v[i] > max) {
max = v[i];
}
}
for (var i = 0, l = v.length; i < l; i++) {
v[i] = Math.exp(v[i] - max);
}
var sum = 0.0;
for (var i = 0, l = v.length; i < l; i++) {
sum += v[i];
}
for (var i = 0, l = v.length; i < l; i++) {
v[i] /= sum;
}
break;
}
return v;
};
this.predict = function(neurons) {
this.network[0] = neurons;
for (var i = 0; i < this.network.length - 1; i++) {
for (var j = 0; j < this.network[i + 1].length; j++) {
this.network[i + 1][j] = this.bias[i][j];
for (var l = 0; l < this.network[i].length; l++) {
this.network[i + 1][j] += this.network[i][l] * this.weights[i][l][j];
}
}
if ((i + 1) < (this.network.length - 1)) {
this.network[i + 1] = compute(this.hidden, this.network[i + 1], this.network.length);
}
}
if (this.network[this.network.length - 1].length > 1) {
return this.network[this.network.length - 1];
}
return this.network[this.network.length - 1][0];
};
};