Exemple #1
0
 private static float CostFunction(Single1D aa, Single1D yy, CostFunctionEnum costFunction)
 {
     return(costFunction switch
     {
         CostFunctionEnum.Quadratic => QuadraticCostFunction(aa, yy),
         CostFunctionEnum.CrossEntropy => CrossEntropyCostFunction(aa, yy),
         _ => throw new InvalidCaseException(nameof(costFunction), costFunction, 386203),
     });
Exemple #2
0
        // ----------------------------------------------------------------------------------------
        #region Network

        public float GetCostAndDerivatives(
            SampleList samples, Single1D derivatives, MeasurementList measurements,
            CalculationArguments arguments)
        {
            CostFunctionEnum costFunction = arguments.settings.CostFunction;
            float            lambda       = arguments.settings.Lambda;
            int   nSamples = samples.Count;
            int   nCoeffs  = derivatives.Count;
            float cost     = 0f;
            Layer last     = Last;

            for (int i = 0; i < nCoeffs; i++)
            {
                derivatives[i] = 0f;
            }
            for (int iSample = 0; iSample < nSamples; iSample++)
            {
                arguments.ThrowIfCancellationRequested();
                Sample   sample      = samples[iSample];
                Single1D measurement = measurements[iSample];
                Input.SetActivations(sample.Inputs, 0);
                FeedForward(true);
                last.GetActivations(measurement, 0);
                cost += CostFunction(measurement, sample.Requirements, costFunction);
                int weightCount = CountWeight();
                cost += 0.5f * lambda * SumWeightSqr() / weightCount; // regularization
                last.CalculateDeltas(sample.Requirements, costFunction);
                FeedBackward(true);
                AddDerivatives(derivatives, 0, lambda / weightCount);
                arguments.reporter?.ReportProgress(iSample, nSamples);
            }
            arguments.reporter?.ReportProgress(0, nSamples);
            cost /= nSamples;
            for (int i = 0; i < nCoeffs; i++)
            {
                derivatives[i] /= nSamples;
            }
            return(cost);
        }
Exemple #3
0
 public virtual void CalculateDeltas(Single1D ys, CostFunctionEnum costFunction)
 // This must be the last layer in the network
 {
 }