optimizer.c 1.1 KB
Newer Older
1 2 3 4
#include <stdlib.h>

#include "optimizer.h"

5
typedef int (*update_func)(void*, void *, paddle_element_type, const void*, int);
6

7 8 9 10
typedef struct paddle_optimizer{
  update_func func;
  void* optimizer;
} paddle_optimizer;
11 12 13 14 15

void paddle_release_optimizer(paddle_optimizer* o) {
  free(o);
}

16 17 18 19 20 21 22 23 24
int paddle_update_parameter(paddle_optimizer* o, void *buffer, paddle_element_type element_type, const void* gradient, int num_bytes) {
  return o->func(o->optimizer, buffer, element_type, gradient, num_bytes);
}

typedef struct {
  double learning_rate;
} SGD_optimizer;

int paddle_SGD_update_parameter(void* optimizer, void *buffer, paddle_element_type element_type, const void* gradient, int num_bytes) {
25 26 27
  // TODO
  return 0;
}
28 29 30 31 32 33 34 35 36

paddle_optimizer* paddle_create_SGD_optimizer(double learning_rate) {
  SGD_optimizer* o = (SGD_optimizer*)malloc(sizeof(SGD_optimizer));
  o->learning_rate = learning_rate;
  paddle_optimizer* container = (paddle_optimizer*)malloc(sizeof(paddle_optimizer));
  container->func = paddle_SGD_update_parameter;
  container->optimizer = o;
  return container;
}