Fixed random values

pull/2514/head
AlexeyAB 6 years ago
parent f37ea75b28
commit e82505d20e
  1. 3
      build/darknet/x64/partial.cmd
  2. 2
      src/detection_layer.c
  3. 2
      src/maxpool_layer.c
  4. 2
      src/network.c
  5. 2
      src/nightmare.c
  6. 2
      src/region_layer.c
  7. 82
      src/utils.c
  8. 5
      src/utils.h
  9. 2
      src/yolo_layer.c

@ -27,6 +27,9 @@ darknet.exe partial cfg/yolov2.cfg yolov2.weights yolov2.conv.23 23
darknet.exe partial cfg/yolov3.cfg yolov3.weights yolov3.conv.81 81
darknet.exe partial cfg/yolov3-spp.cfg yolov3-spp.weights yolov3-spp.conv.85 85
darknet.exe partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15

@ -41,7 +41,7 @@ detection_layer make_detection_layer(int batch, int inputs, int n, int side, int
#endif
fprintf(stderr, "Detection Layer\n");
srand(0);
srand(time(0));
return l;
}

@ -29,7 +29,7 @@ void cudnn_maxpool_setup(layer *l)
maxpool_status = cudnnSetPooling2dDescriptor(
l->poolingDesc,
CUDNN_POOLING_MAX,
CUDNN_PROPAGATE_NAN, // CUDNN_PROPAGATE_NAN, CUDNN_NOT_PROPAGATE_NAN
CUDNN_NOT_PROPAGATE_NAN, // CUDNN_PROPAGATE_NAN, CUDNN_NOT_PROPAGATE_NAN
l->size,
l->size,
0, //l.pad,

@ -348,7 +348,7 @@ float train_network_batch(network net, data d, int n)
int batch = 2;
for(i = 0; i < n; ++i){
for(j = 0; j < batch; ++j){
int index = rand()%d.X.rows;
int index = random_gen()%d.X.rows;
state.input = d.X.vals[index];
state.truth = d.y.vals[index];
forward_network(net, state);

@ -181,7 +181,7 @@ void reconstruct_picture(network net, float *features, image recon, image update
void run_nightmare(int argc, char **argv)
{
srand(0);
srand(time(0));
if(argc < 4){
fprintf(stderr, "usage: %s %s [cfg] [weights] [image] [layer] [options! (optional)]\n", argv[0], argv[1]);
return;

@ -46,7 +46,7 @@ region_layer make_region_layer(int batch, int w, int h, int n, int classes, int
#endif
fprintf(stderr, "detection\n");
srand(0);
srand(time(0));
return l;
}

@ -60,7 +60,7 @@ void shuffle(void *arr, size_t n, size_t size)
size_t i;
void* swp = (void*)calloc(1, size);
for(i = 0; i < n-1; ++i){
size_t j = i + rand()/(RAND_MAX / (n-i)+1);
size_t j = i + random_gen()/(RAND_MAX / (n-i)+1);
memcpy(swp, (char*)arr+(j*size), size);
memcpy((char*)arr+(j*size), (char*)arr+(i*size), size);
memcpy((char*)arr+(i*size), swp, size);
@ -699,7 +699,7 @@ int rand_int(int min, int max)
min = max;
max = s;
}
int r = (rand()%(max - min + 1)) + min;
int r = (random_gen()%(max - min + 1)) + min;
return r;
}
@ -717,10 +717,10 @@ float rand_normal()
haveSpare = 1;
rand1 = rand() / ((double) RAND_MAX);
rand1 = random_gen() / ((double) RAND_MAX);
if(rand1 < 1e-100) rand1 = 1e-100;
rand1 = -2 * log(rand1);
rand2 = (rand() / ((double)RAND_MAX)) * 2.0 * M_PI;
rand2 = (random_gen() / ((double)RAND_MAX)) * 2.0 * M_PI;
return sqrt(rand1) * cos(rand2);
}
@ -731,21 +731,21 @@ float rand_normal()
int n = 12;
int i;
float sum= 0;
for(i = 0; i < n; ++i) sum += (float)rand()/RAND_MAX;
for(i = 0; i < n; ++i) sum += (float)random_gen()/RAND_MAX;
return sum-n/2.;
}
*/
size_t rand_size_t()
{
return ((size_t)(rand()&0xff) << 56) |
((size_t)(rand()&0xff) << 48) |
((size_t)(rand()&0xff) << 40) |
((size_t)(rand()&0xff) << 32) |
((size_t)(rand()&0xff) << 24) |
((size_t)(rand()&0xff) << 16) |
((size_t)(rand()&0xff) << 8) |
((size_t)(rand()&0xff) << 0);
return ((size_t)(random_gen()&0xff) << 56) |
((size_t)(random_gen()&0xff) << 48) |
((size_t)(random_gen()&0xff) << 40) |
((size_t)(random_gen()&0xff) << 32) |
((size_t)(random_gen()&0xff) << 24) |
((size_t)(random_gen()&0xff) << 16) |
((size_t)(random_gen()&0xff) << 8) |
((size_t)(random_gen()&0xff) << 0);
}
float rand_uniform(float min, float max)
@ -755,7 +755,14 @@ float rand_uniform(float min, float max)
min = max;
max = swap;
}
return ((float)rand()/RAND_MAX * (max - min)) + min;
if (RAND_MAX < 65536) {
int rnd = rand()*(RAND_MAX + 1) + rand();
return ((float)rnd / (RAND_MAX*RAND_MAX) * (max - min)) + min;
}
else {
return ((float)rand() / RAND_MAX * (max - min)) + min;
}
//return (random_float() * (max - min)) + min;
}
@ -785,6 +792,9 @@ unsigned int random_gen()
rand_s(&rnd);
#else
rnd = rand();
if (RAND_MAX < 65536) {
rnd = rand()*(RAND_MAX + 1) + rnd;
}
#endif
return rnd;
}
@ -807,3 +817,47 @@ float rand_uniform_strong(float min, float max)
}
return (random_float() * (max - min)) + min;
}
float rand_precalc_random(float min, float max, float random_part)
{
if (max < min) {
float swap = min;
min = max;
max = swap;
}
return (random_part * (max - min)) + min;
}
#define RS_SCALE (1.0 / (1.0 + RAND_MAX))
double double_rand(void)
{
double d;
do {
d = (((rand() * RS_SCALE) + rand()) * RS_SCALE + rand()) * RS_SCALE;
} while (d >= 1); // Round off
return d;
}
unsigned int uint_rand(unsigned int less_than)
{
return (unsigned int)((less_than)* double_rand());
}
int check_array_is_nan(float *arr, int size)
{
int i;
for (i = 0; i < size; ++i) {
if (isnan(arr[i])) return 1;
}
return 0;
}
int check_array_is_inf(float *arr, int size)
{
int i;
for (i = 0; i < size; ++i) {
if (isinf(arr[i])) return 1;
}
return 0;
}

@ -70,6 +70,11 @@ void print_statistics(float *a, int n);
unsigned int random_gen();
float random_float();
float rand_uniform_strong(float min, float max);
float rand_precalc_random(float min, float max, float random_part);
double double_rand(void);
unsigned int uint_rand(unsigned int less_than);
int check_array_is_nan(float *arr, int size);
int check_array_is_inf(float *arr, int size);
int int_index(int *a, int val, int n);
#ifdef __cplusplus

@ -70,7 +70,7 @@ layer make_yolo_layer(int batch, int w, int h, int n, int total, int *mask, int
#endif
fprintf(stderr, "yolo\n");
srand(0);
srand(time(0));
return l;
}

Loading…
Cancel
Save