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

Function batch_normalize_conv

dlib/cuda/cpu_dlib.cpp:1042–1155  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1040 }
1041
1042 void batch_normalize_conv (
1043 const double eps,
1044 resizable_tensor& dest,
1045 resizable_tensor& means,
1046 resizable_tensor& invstds,
1047 const double averaging_factor,
1048 resizable_tensor& running_means,
1049 resizable_tensor& running_variances,
1050 const tensor& src,
1051 const tensor& gamma,
1052 const tensor& beta
1053 )
1054 {
1055 DLIB_CASSERT(0 <= averaging_factor && averaging_factor <= 1, "averaging_factor: " << averaging_factor);
1056 DLIB_CASSERT(averaging_factor==1 || have_same_dimensions(running_means,means));
1057 DLIB_CASSERT(averaging_factor==1 || have_same_dimensions(running_variances,invstds));
1058 DLIB_CASSERT(
1059 src.num_samples() > 1 &&
1060 gamma.num_samples() == 1 &&
1061 beta.num_samples() == 1 &&
1062 gamma.nr() == 1 &&
1063 beta.nr() == 1 &&
1064 gamma.nc() == 1 &&
1065 beta.nc() == 1 &&
1066 gamma.k() == beta.k() && beta.k() == src.k() &&
1067 eps > 0,
1068 "\ngamma.num_samples(): " << gamma.num_samples() <<
1069 "\ngamma.k(): " << gamma.k() <<
1070 "\ngamma.nr(): " << gamma.nr() <<
1071 "\ngamma.nc(): " << gamma.nc() <<
1072 "\nbeta.num_samples(): " << beta.num_samples() <<
1073 "\nbeta.k(): " << beta.k() <<
1074 "\nbeta.nr(): " << beta.nr() <<
1075 "\nbeta.nc(): " << beta.nc() <<
1076 "\nsrc.k(): " << src.k() <<
1077 "\nsrc.nr(): " << src.nr() <<
1078 "\nsrc.nc(): " << src.nc() <<
1079 "\neps: " << eps
1080 );
1081
1082 dest.copy_size(src);
1083 means.set_size(1, src.k());
1084 invstds.set_size(1, src.k());
1085 running_means.set_size(1, src.k());
1086 running_variances.set_size(1, src.k());
1087
1088 // first compute means and invstds
1089 const auto p_invstds = invstds.host();
1090 const auto p_means = means.host();
1091 const auto p_gamma = gamma.host();
1092 const auto p_beta = beta.host();
1093 auto p_src = src.host();
1094 auto rvar = running_variances.host();
1095 const long num = src.nr()*src.nc();
1096
1097 // This scale makes the running variances unbiased.
1098 const double scale = (src.num_samples()*num)/(src.num_samples()*num-1.0);
1099

Callers 3

forwardMethod · 0.50

Calls 11

tensor_indexFunction · 0.85
copy_sizeMethod · 0.80
have_same_dimensionsFunction · 0.70
matFunction · 0.70
sqrtFunction · 0.50
num_samplesMethod · 0.45
nrMethod · 0.45
ncMethod · 0.45
kMethod · 0.45
set_sizeMethod · 0.45
hostMethod · 0.45

Tested by 2