Example #1
0
            public IMatrix Execute(IMatrix error, ITrainingContext context, bool calculateOutput, INeuralNetworkUpdateAccumulator updateAccumulator)
            {
                var matrixList = error.AsIndexable().Columns.Select(v => v.ToArray()).ToList();

                var newMatrixList = new List <IMatrix>();
                Tuple <int, int> newIndex;

                for (var i = 0; i < matrixList.Count; i++)
                {
                    var matrix = matrixList[i];
                    var table  = _indexPosList[i];

                    newMatrixList.Add(_lap.Create(_rows, _columns, (x, y) => {
                        if (table.TryGetValue(Tuple.Create(x, y), out newIndex))
                        {
                            var newIndex2 = newIndex.Item1 * _newRows + newIndex.Item2;
                            return(matrix[newIndex2]);
                        }
                        return(0f);
                    }));
                }
                using (var tensor = _lap.CreateTensor(newMatrixList)) {
                    var ret = tensor.ConvertToMatrix();
                    foreach (var item in newMatrixList)
                    {
                        item.Dispose();
                    }
                    return(ret);
                }
            }
Example #2
0
        public I3DTensor ConvertToTensor(IMatrix matrix)
        {
            var sliceList = new List <IMatrix>();

            for (int i = 0, len = matrix.ColumnCount; i < len; i++)
            {
                using (var vector = matrix.Column(i)) {
                    var parts = vector.Split(_inputWidth);
                    //var sliceMatrix = _lap.Create(parts).Transpose();
                    var sliceMatrix = _lap.Create(parts);
                    sliceList.Add(sliceMatrix);
                    foreach (var part in parts)
                    {
                        part.Dispose();
                    }
                }
            }
            var ret = _lap.CreateTensor(sliceList);

            foreach (var slice in sliceList)
            {
                slice.Dispose();
            }
            return(ret);
        }
Example #3
0
 public I3DTensor ExecuteToTensor(I3DTensor tensor)
 {
     using (var output = ExecuteToMatrix(tensor)) {
         // convert the matrix to a tensor
         var sliceList = new List <IMatrix>();
         for (int i = 0, len = output.ColumnCount; i < len; i++)
         {
             using (var vector = output.Column(i)) {
                 var parts       = vector.Split(tensor.ColumnCount);
                 var sliceMatrix = _lap.Create(parts);
                 sliceList.Add(sliceMatrix);
                 foreach (var part in parts)
                 {
                     part.Dispose();
                 }
             }
         }
         var ret = _lap.CreateTensor(sliceList);
         foreach (var slice in sliceList)
         {
             slice.Dispose();
         }
         return(ret);
     }
 }
Example #4
0
        /// <summary>
        /// Converts the volume to a tensor
        /// </summary>
        /// <param name="lap">The linear algebra provider</param>
        public I3DTensor AsTensor(ILinearAlgebraProvider lap)
        {
            var matrixList = Layers.Select(l => l.AsMatrix(lap)).ToList();
            var ret        = lap.CreateTensor(matrixList);

            foreach (var item in matrixList)
            {
                item.Dispose();
            }
            return(ret);
        }