#ifndef BASE_LAYER_H #define BASE_LAYER_H #include "activations.h" #include "stddef.h" #include "tree.h" struct network_state; struct layer; typedef struct layer layer; typedef enum { CONVOLUTIONAL, DECONVOLUTIONAL, CONNECTED, MAXPOOL, SOFTMAX, DETECTION, DROPOUT, CROP, ROUTE, COST, NORMALIZATION, AVGPOOL, LOCAL, SHORTCUT, ACTIVE, RNN, GRU, CRNN, BATCHNORM, NETWORK, XNOR, REGION, REORG, REORG_OLD, BLANK } LAYER_TYPE; typedef enum{ SSE, MASKED, SMOOTH } COST_TYPE; struct layer{ LAYER_TYPE type; ACTIVATION activation; COST_TYPE cost_type; void (*forward) (struct layer, struct network_state); void (*backward) (struct layer, struct network_state); void (*update) (struct layer, int, float, float, float); void (*forward_gpu) (struct layer, struct network_state); void (*backward_gpu) (struct layer, struct network_state); void (*update_gpu) (struct layer, int, float, float, float); int batch_normalize; int shortcut; int batch; int forced; int flipped; int inputs; int outputs; int truths; int h,w,c; int out_h, out_w, out_c; int n; int max_boxes; int small_object; int groups; int size; int side; int stride; int reverse; int pad; int sqrt; int flip; int index; int binary; int xnor; int steps; int hidden; float dot; float angle; float jitter; float saturation; float exposure; float shift; float ratio; int focal_loss; int softmax; int classes; int coords; int background; int rescore; int objectness; int does_cost; int joint; int noadjust; int reorg; int log; int adam; float B1; float B2; float eps; float *m_gpu; float *v_gpu; int t; float *m; float *v; tree *softmax_tree; int *map; float alpha; float beta; float kappa; float coord_scale; float object_scale; float noobject_scale; float class_scale; int bias_match; int random; float thresh; int classfix; int absolute; int onlyforward; int stopbackward; int dontload; int dontloadscales; float temperature; float probability; float scale; int *indexes; float *rand; float *cost; char *cweights; float *state; float *prev_state; float *forgot_state; float *forgot_delta; float *state_delta; float *concat; float *concat_delta; float *binary_weights; float *biases; float *bias_updates; float *scales; float *scale_updates; float *weights; float *weight_updates; float *col_image; int * input_layers; int * input_sizes; float * delta; float * output; float * squared; float * norms; float * spatial_mean; float * mean; float * variance; float * mean_delta; float * variance_delta; float * rolling_mean; float * rolling_variance; float * x; float * x_norm; struct layer *input_layer; struct layer *self_layer; struct layer *output_layer; struct layer *input_gate_layer; struct layer *state_gate_layer; struct layer *input_save_layer; struct layer *state_save_layer; struct layer *input_state_layer; struct layer *state_state_layer; struct layer *input_z_layer; struct layer *state_z_layer; struct layer *input_r_layer; struct layer *state_r_layer; struct layer *input_h_layer; struct layer *state_h_layer; float *z_cpu; float *r_cpu; float *h_cpu; float *binary_input; size_t workspace_size; #ifdef GPU float *z_gpu; float *r_gpu; float *h_gpu; int *indexes_gpu; float * prev_state_gpu; float * forgot_state_gpu; float * forgot_delta_gpu; float * state_gpu; float * state_delta_gpu; float * gate_gpu; float * gate_delta_gpu; float * save_gpu; float * save_delta_gpu; float * concat_gpu; float * concat_delta_gpu; float *binary_input_gpu; float *binary_weights_gpu; float * mean_gpu; float * variance_gpu; float * rolling_mean_gpu; float * rolling_variance_gpu; float * variance_delta_gpu; float * mean_delta_gpu; float * col_image_gpu; float * x_gpu; float * x_norm_gpu; float * weights_gpu; float * weight_updates_gpu; float * weights_gpu16; float * weight_updates_gpu16; float * biases_gpu; float * bias_updates_gpu; float * scales_gpu; float * scale_updates_gpu; float * output_gpu; float * delta_gpu; float * rand_gpu; float * squared_gpu; float * norms_gpu; #ifdef CUDNN cudnnTensorDescriptor_t srcTensorDesc, dstTensorDesc; cudnnTensorDescriptor_t dsrcTensorDesc, ddstTensorDesc; cudnnFilterDescriptor_t weightDesc; cudnnFilterDescriptor_t dweightDesc; cudnnConvolutionDescriptor_t convDesc; cudnnConvolutionFwdAlgo_t fw_algo; cudnnConvolutionBwdDataAlgo_t bd_algo; cudnnConvolutionBwdFilterAlgo_t bf_algo; #endif #endif }; void free_layer(layer); #endif