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); } }
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); }
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); } }
/// <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); }