示例#1
0
        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);
            }
        }