AlexeyAB
2018-02-15 a1af57d8d60b50e8188f36b7f74752c8cc124177
src/network.c
@@ -50,6 +50,7 @@
    int batch_num = get_current_batch(net);
    int i;
    float rate;
   if (batch_num < net.burn_in) return net.learning_rate * pow((float)batch_num / net.burn_in, net.power);
    switch (net.policy) {
        case CONSTANT:
            return net.learning_rate;
@@ -66,8 +67,9 @@
        case EXP:
            return net.learning_rate * pow(net.gamma, batch_num);
        case POLY:
            if (batch_num < net.burn_in) return net.learning_rate * pow((float)batch_num / net.burn_in, net.power);
            return net.learning_rate * pow(1 - (float)batch_num / net.max_batches, net.power);
         return net.learning_rate * pow(1 - (float)batch_num / net.max_batches, net.power);
            //if (batch_num < net.burn_in) return net.learning_rate * pow((float)batch_num / net.burn_in, net.power);
            //return net.learning_rate * pow(1 - (float)batch_num / net.max_batches, net.power);
        case RANDOM:
            return net.learning_rate * pow(rand_uniform(0,1), net.power);
        case SIG:
@@ -218,6 +220,7 @@
            state.delta = prev.delta;
        }
        layer l = net.layers[i];
        if (l.stopbackward) break;
        l.backward(l, state);
    }
}
@@ -356,6 +359,7 @@
        }else if(l.type == COST){
            resize_cost_layer(&l, inputs);
        }else{
         fprintf(stderr, "Resizing type %d \n", (int)l.type);
            error("Cannot resize this type of layer");
        }
        if(l.workspace_size > workspace_size) workspace_size = l.workspace_size;
@@ -595,11 +599,14 @@
      free_layer(net.layers[i]);
   }
   free(net.layers);
   free(net.workspace);
#ifdef GPU
   if (gpu_index >= 0) cuda_free(net.workspace);
   else free(net.workspace);
   if (*net.input_gpu) cuda_free(*net.input_gpu);
   if (*net.truth_gpu) cuda_free(*net.truth_gpu);
   if (net.input_gpu) free(net.input_gpu);
   if (net.truth_gpu) free(net.truth_gpu);
#else
   free(net.workspace);
#endif
}