public float GetError(Norm norm) { float error = 0; switch (norm) { case Norm.L1: _groundTrouthData.Sub(_res, _temp); _temp.Abs(); _temp.Sum(_summedError, _buffer); error = _summedError; error = error / _batch / _inChannels / _inWidth / _inHeight; return(error); case Norm.L2: _groundTrouthData.Sub(_res, _temp); _temp.Sqr(); _temp.Sum(_summedError, _buffer); error = _summedError; error = error / _batch / _inChannels / _inWidth / _inHeight; return(error); case Norm.MSSSIM: return(error); case Norm.Mix: if (_msssiml1 == null) { _msssiml1 = new CudaDeviceVariable <float>(_inChannels * _batch); } if (_kernelMSSSIML1 == null) { } _kernelMSSSIML1.RunSafe(_res, _groundTrouthData, _msssiml1, _dx, _inChannels, _batch, 0.84f); _msssiml1.Sum(_summedError, _buffer); error = _summedError; return(error); default: return(0); } }