#ifndef BASE_LAYER_H #define BASE_LAYER_H #include "activations.h" #include "stddef.h" 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, BLANK } LAYER_TYPE; typedef enum{ SSE, MASKED, SMOOTH } COST_TYPE; struct layer{ LAYER_TYPE type; ACTIVATION activation; COST_TYPE cost_type; 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 groups; int size; int side; int stride; 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 softmax; int classes; int coords; int background; int rescore; int objectness; int does_cost; int joint; int noadjust; int reorg; int log; float alpha; float beta; float kappa; float coord_scale; float object_scale; float noobject_scale; float class_scale; int random; 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 * 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