Пример #1
0
        private void CreatePValues()
        {
            pValuesPool = mlp.Adapter.DeviceArrayManagement.CreatePool();

            int uLayersCount = mlp.Layers.Count - 1;
            for (int lidx = 1; lidx < mlp.Layers.Count; lidx++)
            {
                var layer = mlp.Layers[lidx];
                var biases = mlp.Biases[lidx];

                var pWeightValues = new LinkedList<Marshaled<IDeviceArray[]>[]>();

                // Biases:
                var pWeightValuesOfInput = new Marshaled<IDeviceArray[]>[biases.Size];

                for (int biasIndex = 0; biasIndex < biases.Size; biasIndex++)
                {
                    pWeightValuesOfInput[biasIndex] = mlp.AsMarshaled(new IDeviceArray[uLayersCount]);

                    for (int lidx2 = 0; lidx2 < uLayersCount; lidx2++)
                    {
                        pWeightValuesOfInput[biasIndex].Instance()[lidx2] = pValuesPool.CreateArray(GetULayerSize(lidx2));
                    }
                }

                pWeightValues.AddLast(pWeightValuesOfInput);

                // Weighted conns:
                foreach (var inputConnectedLayer in layer.Layer.GetInputLayers())
                {
                    int inputIndex = mlp.GetLayerIndex(inputConnectedLayer);
                    var key = Tuple.Create(inputIndex, lidx);
                    var weigths = mlp.Weights[key];

                    pWeightValuesOfInput = new Marshaled<IDeviceArray[]>[weigths.Size];

                    for (int weightIndex = 0; weightIndex < weigths.Size; weightIndex++)
                    {
                        pWeightValuesOfInput[weightIndex] = mlp.AsMarshaled(new IDeviceArray[uLayersCount]);
                        for (int lidx2 = 0; lidx2 < uLayersCount; lidx2++)
                        {
                            pWeightValuesOfInput[weightIndex].Instance()[lidx2] = pValuesPool.CreateArray(GetULayerSize(lidx2));
                        }
                    }

                    pWeightValues.AddLast(pWeightValuesOfInput);
                }

                this.pWeightValues.Add(pWeightValues.ToArray());
            }
        }
Пример #2
0
 private void CreatePValues()
 {
     var pvs = new LinkedList<IDeviceArray2[]>();
     pValuesPool = mlp.Adapter.DeviceArrayManagement.CreatePool();
     uLayersCount = mlp.Layers.Count - 1;
     maxULayerSize = mlp.Layers.Where(l => l.Index != 0).Max(l => l.Layer.Size);
     for (int lidx = 1; lidx < mlp.Layers.Count; lidx++)
     {
         var lpvs = new LinkedList<IDeviceArray2>();
         var layer = mlp.Layers[lidx];
         var biases = mlp.Biases[lidx];
         lpvs.AddLast(CreatePValuesForWeights(biases));
         foreach (var inputConnectedLayer in layer.Layer.GetInputLayers())
         {
             int inputIndex = mlp.GetLayerIndex(inputConnectedLayer);
             var wkey = Tuple.Create(inputIndex, lidx);
             var weigths = mlp.Weights[wkey];
             lpvs.AddLast(CreatePValuesForWeights(weigths));
         }
         pvs.AddLast(lpvs.ToArray());
     }
     pValues = pvs.ToArray();
 }
Пример #3
0
 private void Free()
 {
     if (pValuesPool != null)
     {
         ResourceManager.Free(pValuesPool);
         foreach (var p in pWeightValues) Free(p);
         pValuesPool = null;
     }
 }