No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

training.c 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "randomness.h"
  5. #include "activations.h"
  6. #include "neurons.h"
  7. #include "network.h"
  8. #include "preprocessing.h"
  9. #include "training.h"
  10. void forward(Network *network, Sample *sample)
  11. {
  12. Feature *current_feature;
  13. Neuron *current_neuron, *prev_layer_current_neuron;
  14. Weight *current_weight;
  15. int i;
  16. for(i=0 ; i<network->n_layers ; i++)
  17. {
  18. if(i==0) //set first layer neurons' output equal to sample's features
  19. {
  20. current_feature = sample->first_feature;
  21. current_neuron = network->layers_first_neurons[i];
  22. while(current_neuron != NULL)
  23. {
  24. current_neuron->output = current_feature->value;
  25. current_feature = current_feature->next_feature;
  26. current_neuron = current_neuron->same_layer_next_neuron;
  27. }
  28. }else //when layer not first one, do dot product sum with bias
  29. {
  30. current_neuron = network->layers_first_neurons[i];
  31. while(current_neuron != NULL)
  32. {
  33. prev_layer_current_neuron = network->layers_first_neurons[i-1];
  34. current_neuron->output = current_neuron->bias;
  35. current_weight = current_neuron->weights;
  36. while(prev_layer_current_neuron != NULL)
  37. {
  38. current_neuron->output += prev_layer_current_neuron->output*current_weight->value;
  39. current_weight = current_weight->next;
  40. prev_layer_current_neuron = prev_layer_current_neuron->same_layer_next_neuron;
  41. }
  42. current_neuron->output = current_neuron->activation( current_neuron->output ); //apply activation function
  43. current_neuron = current_neuron->same_layer_next_neuron;
  44. }
  45. }
  46. }
  47. }
  48. void errors_propagate(Network *network, Sample *sample)
  49. {
  50. }
  51. void backpropagate(Network *network, float learning_rate)
  52. {
  53. }