Added a seperate layer file for batchnorm,to support an independent batchnorm class in order to pass necessary parameters read from the bin file.

This commit is contained in:
perseusdg
2022-01-09 23:03:26 +05:30
parent cabebc95a2
commit e1eac2d42a
2 changed files with 147 additions and 0 deletions
+59
View File
@@ -180,6 +180,65 @@ public:
};
class LayerBNWgs : public Layer {
public:
LayerBNWgs(Network* net, int input, int output, std::string fname_weights);
~LayerBNWgs();
int inputs, outputs;
std::string weights_path;
dnnType* bias_h, * bias_d;
dnnType* power_h = nullptr;
dnnType* scales_h = nullptr, * scales_d = nullptr;
dnnType* mean_h = nullptr, * mean_d = nullptr;
dnnType* variance_h = nullptr, * variance_d = nullptr;
__half* bias16_h = nullptr, * bias16_d = nullptr;
__half* power16_h = nullptr, * power16_d = nullptr;
__half* scales16_h = nullptr, * scales16_d = nullptr;
__half* mean16_h = nullptr, * mean16_d = nullptr;
__half* variance16_h = nullptr, * variance16_d = nullptr;
void releaseHost(bool release32 = true, bool release16 = true) {
if (release32) {
if (bias_h != nullptr) { delete[] bias_h; bias_h = nullptr; }
if (scales_h != nullptr) { delete[] scales_h; scales_h = nullptr; }
if (mean_h != nullptr) { delete[] mean_h; mean_h = nullptr; }
if (variance_h != nullptr) { delete[] variance_h; variance_h = nullptr; }
if (power_h != nullptr) { delete[] power_h; power_h = nullptr; }
}
if (net->fp16 && release16) {
if (bias16_h != nullptr) { delete[] bias16_h; bias16_h = nullptr; }
if (scales16_h != nullptr) { delete[] scales16_h; scales16_h = nullptr; }
if (mean16_h != nullptr) { delete[] mean16_h; mean16_h = nullptr; }
if (variance16_h != nullptr) { delete[] variance16_h; variance16_h = nullptr; }
if (power16_h != nullptr) { delete[] power16_h; power16_h = nullptr; }
}
}
void releaseDevice(bool release32 = true, bool release16 = true) {
if (release32) {
if (bias_d != nullptr) { cudaFree(bias_d); bias_d = nullptr; }
if (scales_d != nullptr) { cudaFree(scales_d); scales_d = nullptr; }
if (mean_d != nullptr) { cudaFree(mean_d); mean_d = nullptr; }
if (variance_d != nullptr) { cudaFree(variance_d); variance_d = nullptr; }
}
if (net->fp16 && release16) {
if (bias16_d != nullptr) { cudaFree(bias16_d); bias16_d = nullptr; }
if (scales16_d != nullptr) { cudaFree(scales16_d); scales16_d = nullptr; }
if (mean16_d != nullptr) { cudaFree(mean16_d); mean16_d = nullptr; }
if (variance16_d != nullptr) { cudaFree(variance16_d); variance16_d = nullptr; }
if (power16_d != nullptr) { cudaFree(power16_d); power16_d = nullptr; }
}
}
};
/**
Input layer (it doesn't need weights)
*/