| 391 | } |
| 392 | |
| 393 | void batch_normalize ( |
| 394 | const double eps, |
| 395 | resizable_tensor& dest, |
| 396 | resizable_tensor& means, |
| 397 | resizable_tensor& invstds, |
| 398 | const double averaging_factor, |
| 399 | resizable_tensor& running_means, |
| 400 | resizable_tensor& running_variances, |
| 401 | const tensor& src, |
| 402 | const tensor& gamma, |
| 403 | const tensor& beta |
| 404 | ) |
| 405 | { |
| 406 | DLIB_CASSERT(0 <= averaging_factor && averaging_factor <= 1, "averaging_factor: " << averaging_factor); |
| 407 | DLIB_CASSERT(averaging_factor==1 || have_same_dimensions(running_means,means)); |
| 408 | DLIB_CASSERT(averaging_factor==1 || have_same_dimensions(running_variances,invstds)); |
| 409 | DLIB_CASSERT( |
| 410 | src.num_samples() > 1 && |
| 411 | gamma.num_samples() == 1 && |
| 412 | beta.num_samples() == 1 && |
| 413 | gamma.nr() == beta.nr() && beta.nr() == src.nr() && |
| 414 | gamma.nc() == beta.nc() && beta.nc() == src.nc() && |
| 415 | gamma.k() == beta.k() && beta.k() == src.k() && |
| 416 | eps > 0, |
| 417 | "\ngamma.num_samples(): " << gamma.num_samples() << |
| 418 | "\ngamma.k(): " << gamma.k() << |
| 419 | "\ngamma.nr(): " << gamma.nr() << |
| 420 | "\ngamma.nc(): " << gamma.nc() << |
| 421 | "\nbeta.num_samples(): " << beta.num_samples() << |
| 422 | "\nbeta.k(): " << beta.k() << |
| 423 | "\nbeta.nr(): " << beta.nr() << |
| 424 | "\nbeta.nc(): " << beta.nc() << |
| 425 | "\nsrc.k(): " << src.k() << |
| 426 | "\nsrc.nr(): " << src.nr() << |
| 427 | "\nsrc.nc(): " << src.nc() << |
| 428 | "\neps: " << eps |
| 429 | ); |
| 430 | |
| 431 | const float in_scale = 1; |
| 432 | const float out_scale = 0; |
| 433 | |
| 434 | dest.copy_size(src); |
| 435 | means.set_size(1, src.k(), src.nr(), src.nc()); |
| 436 | invstds.copy_size(means); |
| 437 | running_means.copy_size(means); |
| 438 | running_variances.copy_size(means); |
| 439 | // cuDNN requires that running_means and running_variances be initialized to |
| 440 | // some valid float values even if the averaging factor would have ignored |
| 441 | // them. |
| 442 | if (averaging_factor == 1) |
| 443 | { |
| 444 | running_means = 0; |
| 445 | running_variances = 1; |
| 446 | } |
| 447 | |
| 448 | CHECK_CUDNN(cudnnBatchNormalizationForwardTraining( |
| 449 | context(), |
| 450 | CUDNN_BATCHNORM_PER_ACTIVATION, |
nothing calls this directly
no test coverage detected