NN: Make base layer fields accessible from sub layers.

This commit is contained in:
iabdalkader 2018-05-22 16:30:46 +02:00
parent fce3b9476a
commit d967ad62cd
2 changed files with 27 additions and 24 deletions

View File

@ -165,14 +165,14 @@ int nn_load_network(nn_t *net, const char *path)
// Alloc and read weights array
read_data(&fp, &conv_layer->w_size, 4);
printf("weights: %lu ", conv_layer->w_size);
conv_layer->w = xalloc(conv_layer->w_size);
read_data(&fp, conv_layer->w, conv_layer->w_size);
conv_layer->wt = xalloc(conv_layer->w_size);
read_data(&fp, conv_layer->wt, conv_layer->w_size);
// Alloc and read bias array
read_data(&fp, &conv_layer->b_size, 4);
printf("bias: %lu\n", conv_layer->b_size);
conv_layer->b = xalloc(conv_layer->b_size);
read_data(&fp, conv_layer->b, conv_layer->b_size);
conv_layer->bias = xalloc(conv_layer->b_size);
read_data(&fp, conv_layer->bias, conv_layer->b_size);
break;
}
@ -185,7 +185,7 @@ int nn_load_network(nn_t *net, const char *path)
case LAYER_TYPE_POOL: {
pool_layer_t *pool_layer = (pool_layer_t *) layer;
// Read pooling layer type
read_data(&fp, &pool_layer->type, 4);
read_data(&fp, &pool_layer->ptype, 4);
// Read krnel dim, stride and padding
read_data(&fp, &pool_layer->krn_dim, 4);
read_data(&fp, &pool_layer->krn_str, 4);
@ -206,14 +206,14 @@ int nn_load_network(nn_t *net, const char *path)
// Alloc and read weights array
read_data(&fp, &ip_layer->w_size, 4);
printf("weights: %lu ", ip_layer->w_size);
ip_layer->w = xalloc(ip_layer->w_size);
read_data(&fp, ip_layer->w, ip_layer->w_size);
ip_layer->wt = xalloc(ip_layer->w_size);
read_data(&fp, ip_layer->wt, ip_layer->w_size);
// Alloc and read bias array
read_data(&fp, &ip_layer->b_size, 4);
printf("bias %lu\n", ip_layer->b_size);
ip_layer->b = xalloc(ip_layer->b_size);
read_data(&fp, ip_layer->b, ip_layer->b_size);
ip_layer->bias = xalloc(ip_layer->b_size);
read_data(&fp, ip_layer->bias, ip_layer->b_size);
break;
}
}
@ -234,7 +234,7 @@ int nn_load_network(nn_t *net, const char *path)
if (layer->type == LAYER_TYPE_CONV) {
conv_layer_t *conv_layer = (conv_layer_t *) layer;
uint32_t im2col_buffer_size = 2 * 2 * layer->c * conv_layer->krn_dim * conv_layer->krn_dim;
uint32_t im2col_buffer_size = 2 * 2 * conv_layer->c * conv_layer->krn_dim * conv_layer->krn_dim;
max_colbuf_size = IM_MAX(max_colbuf_size, im2col_buffer_size);
}
@ -269,7 +269,7 @@ error:
return res;
}
int nn_run_network(nn_t *net, image_t *image)
int nn_run_network(nn_t *net, image_t *img, int8_t *output)
{
return 0;
}

View File

@ -26,22 +26,25 @@ typedef enum {
NETWORK_TYPE_CAFFE = 0,
} network_type_t;
#define NN_LAYER_BASE \
layer_type_t type; \
uint32_t c, h, w; \
struct _layer *prev;\
struct _layer *next \
typedef struct _layer {
layer_type_t type;
uint32_t c, h, w;
struct _layer *prev;
struct _layer *next;
NN_LAYER_BASE;
} layer_t;
typedef struct {
layer_t base;
NN_LAYER_BASE;
uint32_t r_mean;
uint32_t g_mean;
uint32_t b_mean;
} data_layer_t;
typedef struct {
layer_t base;
NN_LAYER_BASE;
uint32_t l_shift;
uint32_t r_shift;
uint32_t krn_dim;
@ -49,28 +52,28 @@ typedef struct {
uint32_t krn_pad;
uint32_t w_size;
uint32_t b_size;
int8_t *w, *b;
int8_t *wt, *bias;
} conv_layer_t;
typedef struct {
layer_t base;
NN_LAYER_BASE;
} relu_layer_t;
typedef struct {
layer_t base;
pool_type_t type;
NN_LAYER_BASE;
pool_type_t ptype;
uint32_t krn_dim;
uint32_t krn_str;
uint32_t krn_pad;
} pool_layer_t;
typedef struct {
layer_t base;
NN_LAYER_BASE;
uint32_t l_shift;
uint32_t r_shift;
uint32_t w_size;
uint32_t b_size;
int8_t *w, *b;
int8_t *wt, *bias;
} ip_layer_t;
typedef struct {
@ -84,5 +87,5 @@ typedef struct {
int nn_dump_network(nn_t *net);
int nn_load_network(nn_t *net, const char *path);
int nn_run_network(nn_t *net, image_t *image);
int nn_run_network(nn_t *net, image_t *img, int8_t *output);
#endif //#define __CNN_H__