Connected layers work forward and backward!

This commit is contained in:
Joseph Redmon
2013-11-06 10:37:37 -08:00
parent 41bcfac86f
commit 9b1774bd39
12 changed files with 248 additions and 70 deletions

View File

@ -8,7 +8,7 @@
void run_network(image input, network net)
{
int i;
double *input_d = 0;
double *input_d = input.data;
for(i = 0; i < net.n; ++i){
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
@ -30,6 +30,77 @@ void run_network(image input, network net)
}
}
void update_network(network net, double step)
{
int i;
for(i = 0; i < net.n; ++i){
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
update_convolutional_layer(layer, step);
}
else if(net.types[i] == MAXPOOL){
//maxpool_layer layer = *(maxpool_layer *)net.layers[i];
}
else if(net.types[i] == CONNECTED){
connected_layer layer = *(connected_layer *)net.layers[i];
update_connected_layer(layer, step);
}
}
}
void learn_network(image input, network net)
{
int i;
image prev;
double *prev_p;
for(i = net.n-1; i >= 0; --i){
if(i == 0){
prev = input;
prev_p = prev.data;
} else if(net.types[i-1] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i-1];
prev = layer.output;
prev_p = prev.data;
} else if(net.types[i-1] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i-1];
prev = layer.output;
prev_p = prev.data;
} else if(net.types[i-1] == CONNECTED){
connected_layer layer = *(connected_layer *)net.layers[i-1];
prev_p = layer.output;
}
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
learn_convolutional_layer(prev, layer);
}
else if(net.types[i] == MAXPOOL){
//maxpool_layer layer = *(maxpool_layer *)net.layers[i];
}
else if(net.types[i] == CONNECTED){
connected_layer layer = *(connected_layer *)net.layers[i];
learn_connected_layer(prev_p, layer);
}
}
}
double *get_network_output(network net)
{
int i = net.n-1;
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
return layer.output.data;
}
else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
return layer.output.data;
}
else if(net.types[i] == CONNECTED){
connected_layer layer = *(connected_layer *)net.layers[i];
return layer.output;
}
return 0;
}
image get_network_image(network net)
{
int i;