MCPcopy Create free account
hub / github.com/davisking/dlib / batch_normalize_conv_inference

Function batch_normalize_conv_inference

dlib/cuda/cpu_dlib.cpp:977–1040  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

975 // ----------------------------------------------------------------------------------------
976
977 void batch_normalize_conv_inference (
978 const double eps,
979 resizable_tensor& dest,
980 const tensor& src,
981 const tensor& gamma,
982 const tensor& beta,
983 const tensor& running_means,
984 const tensor& running_variances
985 )
986 {
987 DLIB_CASSERT(
988 gamma.num_samples() == 1 &&
989 gamma.nr() == 1 &&
990 gamma.nc() == 1 &&
991 gamma.k() == src.k() &&
992 have_same_dimensions(gamma, beta) &&
993 have_same_dimensions(gamma, running_means) &&
994 have_same_dimensions(gamma, running_variances) &&
995 eps > 0,
996 "\ngamma.num_samples(): " << gamma.num_samples() <<
997 "\ngamma.k(): " << gamma.k() <<
998 "\ngamma.nr(): " << gamma.nr() <<
999 "\ngamma.nc(): " << gamma.nc() <<
1000 "\nbeta.num_samples(): " << beta.num_samples() <<
1001 "\nbeta.k(): " << beta.k() <<
1002 "\nbeta.nr(): " << beta.nr() <<
1003 "\nbeta.nc(): " << beta.nc() <<
1004 "\nrunning_means.num_samples(): " << running_means.num_samples() <<
1005 "\nrunning_means.k(): " << running_means.k() <<
1006 "\nrunning_means.nr(): " << running_means.nr() <<
1007 "\nrunning_means.nc(): " << running_means.nc() <<
1008 "\nrunning_variances.num_samples(): " << running_variances.num_samples() <<
1009 "\nrunning_variances.k(): " << running_variances.k() <<
1010 "\nrunning_variances.nr(): " << running_variances.nr() <<
1011 "\nrunning_variances.nc(): " << running_variances.nc() <<
1012 "\nsrc.k(): " << src.k() <<
1013 "\nsrc.nr(): " << src.nr() <<
1014 "\nsrc.nc(): " << src.nc() <<
1015 "\neps: " << eps
1016 );
1017 dest.copy_size(src);
1018
1019 auto d = dest.host();
1020 auto s = src.host();
1021 auto g = gamma.host();
1022 auto b = beta.host();
1023 auto m = running_means.host();
1024 auto v = running_variances.host();
1025
1026 const long num = src.nr()*src.nc();
1027 for (long n = 0; n < src.num_samples(); ++n)
1028 {
1029 for (long k = 0; k < src.k(); ++k)
1030 {
1031 const float invstd = 1.0f/std::sqrt(v[k] + eps);
1032 for (long j = 0; j < num; ++j)
1033 {
1034 *d = g[k]*(*s - m[k])*invstd + b[k];

Callers 2

forwardMethod · 0.50

Calls 8

copy_sizeMethod · 0.80
have_same_dimensionsFunction · 0.70
sqrtFunction · 0.50
num_samplesMethod · 0.45
nrMethod · 0.45
ncMethod · 0.45
kMethod · 0.45
hostMethod · 0.45

Tested by 1