-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathneuron.cpp
More file actions
99 lines (84 loc) · 1.98 KB
/
neuron.cpp
File metadata and controls
99 lines (84 loc) · 1.98 KB
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
#include "neuron.h"
#include "layer.h"
Neuron::Neuron(){
lastBackPropPass = -1;
}
Neuron* Neuron::getInput(int y, int x, int z){
Neuron *n = layer->getInput(lx,ly,lz,x,y,z);
return n;
}
void Neuron::addToYError(float toAdd, int pass){
if(pass!=lastBackPropPass){
lastBackPropPass = pass;
errorYGradient = 0;
errorZGradient = 0;
}
errorYGradient+= toAdd;
float output = getOutput(pass);
float grad = layer->activationGradient(output);
//printf("%d %d %d adding %f to y grad. %f to z grad\n",lx,ly,lz,toAdd,toAdd*grad);
errorZGradient+= toAdd * grad;
}
/*
class MaxPooling : public Neuron{
public:
float getOutput(int pass){
float output = 0;
for(int i =0; i < ix; i++){
for(int j =0; j < iy; j++){
for(int k =0; k < iz; k++){
output = inputs[i][j][k]->getOutput()>output?inputs[i][j][k]->getOutput():output;
}
}
}
return output;
}
};*/
/*
class Unit : public Neuron{
private:
int passCount;
float outputComputed;
public:
float *kernalBias;
ConvUnit(){
passCount = -1;
}
float getOutput(int pass){
//printf("begin\n");
if(pass==passCount)
return outputComputed;//don't compute twice
passCount =pass;
float output = 0;
for(int i=0; i <iy;i++){
for(int j=0; j<ix;j++){
for(int k=0;k <iz;k++){
//printf("trying to get: %d %d %d\n",i,j,k);
Neuron* n = getInput(i,j,k);
//printf("%d %d %d kernal %f\n",i,j,k,weights[i][j][k]);
float output = n->getOutput(pass);
//printf("output %f\n",output);
output+=output*weights[i][j][k];
}
}
}
//printf("run activationFunction\n");
outputComputed = layer->activationFunction(output+*kernalBias);
//printf("computed: %lf\n",outputComputed);
return outputComputed;
}
};*/
/*
class LocalResponseNormalization : public Neuron{
public:
float alpha, k, beta;
float getOutput(){
float output=inputs[0], sum=0;
for(int i=0; i<inputCount; i++){
sum+=inputs[i].getOutput()*inputs[i].getOutput();
}
sum= pow(sum*alpha+k,beta);
output/=sum;
return output;
}
};*/