unsafe private static void SetGradientsRTLR(RTLRComputationData2 data, int ijValueIndex, float gradient) { var gradients = data.Gradients != null ? data.Gradients.ToManaged2() : null; var gradientSums = data.GradientSums != null ? data.GradientSums.ToManaged2() : null; var biasGradients = data.BiasGradients != null ? data.BiasGradients.ToManaged() : null; var biasGradientSums = data.BiasGradientSums != null ? data.BiasGradientSums.ToManaged() : null; fixed (float* pGradients = gradients != null ? gradients.InternalArray : null, pGradientSums = gradientSums != null ? gradientSums.InternalArray : null, pBiasGradients = biasGradients != null ? biasGradients.InternalArray : null, pBiasGradientSums = biasGradientSums != null ? biasGradientSums.InternalArray : null) { if (pGradients != null) { Debug.Assert(data.JLayerIndex > 0); var gradientsPtr = gradients.ToPtr(pGradients); gradientsPtr[ijValueIndex] = gradient; } if (pGradientSums != null) { Debug.Assert(data.JLayerIndex > 0); var gradientSumsPtr = gradientSums.ToPtr(pGradientSums); gradientSumsPtr[ijValueIndex] += gradient; } if (pBiasGradients != null) { Debug.Assert(data.JLayerIndex == 0); var biasGradientsPtr = biasGradients.ToPtr(pBiasGradients); biasGradientsPtr[ijValueIndex] = gradient; } if (pBiasGradientSums != null) { Debug.Assert(data.JLayerIndex == 0); var biasGradientSumsPtr = biasGradientSums.ToPtr(pBiasGradientSums); biasGradientSumsPtr[ijValueIndex] += gradient; } } }
unsafe private static ManagedArrayPtr GetPValuesPtr(ManagedArray2 pValuesOfWeights, float* pPValuesOfWeights, int ijValueIndex, RTLRComputationData2 data, int kLayerIndex) { return new ManagedArrayPtr(pValuesOfWeights, pPValuesOfWeights, ijValueIndex * (data.ULayersCount * data.MaxULayerSize) + kLayerIndex * data.MaxULayerSize); }