| | |
| | | if(!train) continue; |
| | | dropout_layer layer = *(dropout_layer *)net.layers[i]; |
| | | forward_dropout_layer(layer, input); |
| | | input = layer.output; |
| | | } |
| | | else if(net.types[i] == FREEWEIGHT){ |
| | | if(!train) continue; |
| | |
| | | } |
| | | else if(net.types[i] == CONNECTED){ |
| | | connected_layer layer = *(connected_layer *)net.layers[i]; |
| | | update_connected_layer(layer); |
| | | secret_update_connected_layer((connected_layer *)net.layers[i]); |
| | | //update_connected_layer(layer); |
| | | } |
| | | } |
| | | } |
| | |
| | | softmax_layer layer = *(softmax_layer *)net.layers[i]; |
| | | return layer.output; |
| | | } else if(net.types[i] == DROPOUT){ |
| | | return get_network_output_layer(net, i-1); |
| | | dropout_layer layer = *(dropout_layer *)net.layers[i]; |
| | | return layer.output; |
| | | } else if(net.types[i] == FREEWEIGHT){ |
| | | return get_network_output_layer(net, i-1); |
| | | } else if(net.types[i] == CONNECTED){ |
| | |
| | | softmax_layer layer = *(softmax_layer *)net.layers[i]; |
| | | return layer.delta; |
| | | } else if(net.types[i] == DROPOUT){ |
| | | if(i == 0) return 0; |
| | | return get_network_delta_layer(net, i-1); |
| | | } else if(net.types[i] == FREEWEIGHT){ |
| | | return get_network_delta_layer(net, i-1); |
| | |
| | | } |
| | | } |
| | | |
| | | void compare_networks(network n1, network n2, data test) |
| | | { |
| | | matrix g1 = network_predict_data(n1, test); |
| | | matrix g2 = network_predict_data(n2, test); |
| | | int i; |
| | | int a,b,c,d; |
| | | a = b = c = d = 0; |
| | | for(i = 0; i < g1.rows; ++i){ |
| | | int truth = max_index(test.y.vals[i], test.y.cols); |
| | | int p1 = max_index(g1.vals[i], g1.cols); |
| | | int p2 = max_index(g2.vals[i], g2.cols); |
| | | if(p1 == truth){ |
| | | if(p2 == truth) ++d; |
| | | else ++c; |
| | | }else{ |
| | | if(p2 == truth) ++b; |
| | | else ++a; |
| | | } |
| | | } |
| | | printf("%5d %5d\n%5d %5d\n", a, b, c, d); |
| | | float num = pow((abs(b - c) - 1.), 2.); |
| | | float den = b + c; |
| | | printf("%f\n", num/den); |
| | | } |
| | | |
| | | float network_accuracy(network net, data d) |
| | | { |
| | | matrix guess = network_predict_data(net, d); |