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()); } }
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(); }
private void Free() { if (pValuesPool != null) { ResourceManager.Free(pValuesPool); foreach (var p in pWeightValues) Free(p); pValuesPool = null; } }