コード例 #1
0
        internal ManagedDataArray(float[] array, bool isConst)
        {
            Debug.Assert(array != null && array.Length > 0);

            InternalManagedArray = new ManagedArray(array);
            this.isConst = isConst;
        }
コード例 #2
0
        internal static void UpdateWeightsOffline(
            ManagedArray lastUpdates,
            ManagedArray weights,
            ManagedArray gradientSums,
            float count,
            float rate,
            float momentum,
            bool smoothing)
        {
            Debug.Assert(lastUpdates.Size != 0 && lastUpdates.Size == weights.Size && weights.Size == gradientSums.Size);

            fixed (float* pLastUpdates = lastUpdates.InternalArray, pWeights = weights.InternalArray, pGradients = gradientSums.InternalArray)
            {
                var lastUpdatesPtr = lastUpdates.ToPtr(pLastUpdates);
                var weightsPtr = weights.ToPtr(pWeights);
                var gradientSumsPtr = gradientSums.ToPtr(pGradients);

                if (smoothing)
                {
                    float smoothV = 1.0f - momentum;
                    for (int idx = 0; idx < weights.Size; idx++)
                    {
                        float update = (gradientSumsPtr[idx] / count) * rate;
                        float lastUpdate = lastUpdatesPtr[idx];
                        update = (lastUpdate * momentum) + (update * smoothV);
                        weightsPtr[idx] += update;
                        lastUpdatesPtr[idx] = update;
                    }
                }
                else
                {
                    for (int idx = 0; idx < weights.Size; idx++)
                    {
                        float update = (gradientSumsPtr[idx] / count) * rate;
                        float lastUpdate = lastUpdatesPtr[idx];
                        update = (lastUpdate * momentum) + update;
                        weightsPtr[idx] += update;
                        lastUpdatesPtr[idx] = update;
                    }
                }
            }
        }
コード例 #3
0
 // Copies a 3D [x][y][z] to 4D [index][x][y][z]
 public static void Copy3D4D(ManagedArray dst, ManagedArray src, int index)
 {
     MemCopy(dst, index * src.Length(), src, 0, src.Length());
 }
コード例 #4
0
    protected bool SetupInputData(string training)
    {
        var text = training.Trim();

        if (string.IsNullOrEmpty(text))
        {
            return(false);
        }

        var TrainingBuffer = new TextBuffer(new TextTagTable())
        {
            Text = text
        };

        Examples.Value = Convert.ToInt32(TrainingBuffer.LineCount, ci);

        var inpx = Convert.ToInt32(InputLayerNodes.Value, ci);
        var inpy = Convert.ToInt32(Examples.Value, ci);

        ManagedOps.Free(InputData, OutputData, NormalizationData);

        InputData         = new ManagedArray(inpx, inpy);
        NormalizationData = new ManagedArray(inpx, 2);
        OutputData        = new ManagedArray(1, inpy);

        int min = 0;
        int max = 1;

        for (int x = 0; x < inpx; x++)
        {
            NormalizationData[x, min] = double.MaxValue;
            NormalizationData[x, max] = double.MinValue;
        }

        var current   = DelimiterBox.Active;
        var delimiter = current >= 0 && current < Delimiters.Count ? Delimiters[current].Character : '\t';
        var inputs    = inpx;

        using (var reader = new StringReader(TrainingBuffer.Text))
        {
            for (int y = 0; y < inpy; y++)
            {
                var line = reader.ReadLine();

                if (!string.IsNullOrEmpty(line))
                {
                    var tokens = line.Split(delimiter);

                    if (inputs > 0 && tokens.Length > inputs)
                    {
                        OutputData[0, y] = Convert.ToDouble(tokens[inputs], ci);

                        for (int x = 0; x < inpx; x++)
                        {
                            var data = Convert.ToDouble(tokens[x], ci);

                            NormalizationData[x, min] = data < NormalizationData[x, min] ? data : NormalizationData[x, min];
                            NormalizationData[x, max] = data > NormalizationData[x, max] ? data : NormalizationData[x, max];

                            InputData[x, y] = data;
                        }
                    }
                }
            }
        }

        NormalizeData(InputData, NormalizationData);

        UpdateTextView(Normalization, NormalizationData);

        return(true);
    }
コード例 #5
0
 // Copies a 4D [index][x][y][z] to 3D [x][y][z]
 public static void Copy4D3D(ManagedArray dst, ManagedArray src, int index)
 {
     MemCopy(dst, 0, src, index * dst.Length(), dst.Length());
 }
コード例 #6
0
 static void Vectorize(ManagedArray x1, ManagedArray x2)
 {
     // Reshape into column vectors
     ManagedMatrix.Vector(x1);
     ManagedMatrix.Vector(x2);
 }
コード例 #7
0
 static int Cols(ManagedArray x)
 {
     return(x.x);
 }
コード例 #8
0
 static int Rows(ManagedArray x)
 {
     return(x.y);
 }
コード例 #9
0
 public ManagedArray(ManagedArray a, bool initialize = true)
 {
     Resize(a, initialize);
 }
コード例 #10
0
 public void Resize(ManagedArray a, bool initialize = true)
 {
     Resize(a.x, a.y, a.z, a.i, a.j, initialize);
 }