1 <?php
2 class network {
3
4 public $nn;
5
6 function get($id) {
7 $q = mysql::query("networks.get",array("id"=>$id,"user"=>$_SESSION['id']));
8 if(!$q->num_rows) throw new Exception("Network not found.");
9 $data = $q->fetch_assoc();
10 $this->nn = unserialize(gzuncompress($data['snapshot']));
11
12 return $data;
13 }
14
15 function getAuth($auth) {
16 $q = mysql::query("networks.auth",array("auth"=>$auth));
17 if(!$q->num_rows) throw new Exception("Authkey invalid.");
18 $data = $q->fetch_assoc();
19 $this->nn = unserialize(gzuncompress($data['snapshot']));
20 unset($data['snapshot']);
21 return $data;
22 }
23
24 function listNetworks() {
25 $q = mysql::query("networks.getAll",array("id"=>$_SESSION['id']));
26 $output = "";
27 if($q->num_rows) {
28 $data = mysql::fetch_all($q);
29 foreach($data as $row) {
30 $id = $row['networkID'];
31 $output .= "<tr><td><a href='nm-network.php?n=".$id."' title='Manage Network'>".$row['networkName']."</a></td>";
32 $output .= "<td><a href='nm-edit-network.php?n=$id' title='Settings'><img src='images/cog.png' /></a> ";
33 $output .= "<a href='nm-manage-network.php?action=".Model::$NETWORK."&n=$id' title='Delete Network'><img src='images/cross.png' /></a>";
34 $output .= "</td></tr>";
35 }
36 } else {
37 $output .= "<tr><td colspan='2'><span>No Networks!</td></tr>";
38 }
39 return $output;
40 }
41
42 function add($name,$authkey,$type,$lr="DEFAULT",$momentum="DEFAULT",$mse=NULL,$epoch=NULL) {
43 mysql::query("networks.add",array("label"=>$name, "lr"=>$lr, "mse"=>$mse,
44 "epoch"=>$epoch, "rate"=>$momentum,
45 "key"=>$authkey,"type"=>$type));
46 return mysql::last_id();
47 }
48
49 function save($nn,$id) {
50 ini_set('memory_limit', '-1');
51 $data = gzcompress(serialize($nn));
52 if(strlen($data)/1024 > 1024) {
53 $chunks = str_split($data,500);
54 foreach($chunks as $chunk)
55 mysql::query("networks.stream",array("chunk"=>$chunk,"id"=>$id));
56 } else {
57 mysql::query("networks.update",array("data"=>$data,"id"=>$id));
58 }
59 }
60
61 function updateNetwork($id,$name,$lr,$mse,$epoch,$momentum) {
62 mysql::query("networks.updateAll",array("id"=>$id,
63 "label"=>$name,
64 "lr"=>$lr,
65 "mse"=>$mse,
66 "epoch"=>$epoch,
67 "momentum"=>$momentum));
68 }
69
70 static function validate($id) {
71 $q = mysql::query("networks.validate",array("id"=>$id,"user"=>$_SESSION['id']));
72 return ($q->num_rows);
73 }
74
75 function clearHistory($id,$user) {
76 if(self::validate($id))
77 mysql::query("epoch.clear",array("id"=>$_GET['n']));
78 }
79
80 function getStats($user) {
81 $q = mysql::query("networks.stats", array("id"=>$user));
82 return $q->fetch_assoc();
83 }
84
85 function delete($id) {
86 mysql::query("networks.remove",array("id"=>$id));
87 }
88
89 function buildTree($id,$nn) {
90 $uuid = 0;
91 $output = "<ul>";
92 $lcount = count($nn->layer);
93 for($l=0;$l<$lcount;$l++) {
94 $output .= "<li class='layer'><a href='javascript:void(0);' onclick=\"toggle('ul".($uuid+1)."',this);\">-</a> Layer ".($l+1);
95 $ncount = count($nn->layer[$l]->neuron);
96 for($n=0;$n<$ncount;$n++) {
97 $uuid++;
98 if($n==0) $output .= "<ul id='ul$uuid'>";
99 $output .= "<li class='neuron'><a href='javascript:void(0);' onclick=\"toggle('ul".($uuid+1)."',this);\">+</a> Neuron ".($n+1);
100 $scount = count($nn->layer[$l]->neuron[$n]->synapse);
101 for($s=0;$s<$scount;$s++) {
102 $uuid++;
103 if($s==0) $output .= "<ul id='ul$uuid' style='display:none'>";
104 $output .= "<li class='synapse'>Synapse ".($s+1)."</li>";
105 if($s==$scount-1) $output .= "</ul>";
106
107 }
108 $output .= "</li>";
109 if($n==$ncount-1) $output .= "</ul>";
110 }
111 $output .= "</li>";
112 }
113 $output .= "</ul>";
114 mysql::query("cache.save",array("id"=>$id."tree","network"=>$id,"data"=>$output));
115 return $output;
116 }
117 }
118 ?>