Ejemplo n.º 1
0
        public override void ExecuteForward(IContext context)
        {
            var input       = context.Data;
            var tensor      = input.GetMatrix().ReshapeAs4DTensor(input.Rows, input.Columns, input.Depth);
            var inputWidth  = tensor.ColumnCount;
            var inputHeight = tensor.RowCount;
            var newWidth    = ((inputWidth - _filterWidth + (2 * _padding)) / _xStride) + 1;
            var newHeight   = ((inputHeight - _filterHeight + (2 * _padding)) / _yStride) + 1;

            if (_padding > 0)
            {
                tensor = tensor.AddPadding(_padding);
            }
            var im2Col       = tensor.Im2Col(_filterWidth, _filterHeight, _xStride, _yStride);
            var outputSignal = im2Col.Multiply(_filter);

            outputSignal.AddToEachRow(_bias);
            var outputTensor = outputSignal.ReshapeAs4DTensor(newHeight, newWidth);

            Debug.Assert(outputTensor.Depth == FilterCount && outputTensor.Count == tensor.Count);
            var graphData = new Tensor4DGraphData(outputTensor);

            _AddNextGraphAction(context, graphData,
                                () => new Backpropagation(this, im2Col, inputWidth, inputHeight, tensor.Depth, tensor.Count,
                                                          newWidth, newHeight));
        }
Ejemplo n.º 2
0
        public override void ExecuteForward(IContext context)
        {
            var input  = context.Data;
            var lap    = context.LinearAlgebraProvider;
            var tensor = input.GetMatrix().ConvertTo4DTensor(input.Rows, input.Columns, input.Depth);

            var inputWidth  = tensor.ColumnCount;
            var inputHeight = tensor.RowCount;
            var newWidth    = ((inputWidth - _filterWidth + (2 * _padding)) / _stride) + 1;
            var newHeight   = ((inputHeight - _filterHeight + (2 * _padding)) / _stride) + 1;

            if (_padding > 0)
            {
                tensor = tensor.AddPadding(_padding);
            }

            var im2Col       = tensor.Im2Col(_filterWidth, _filterHeight, _stride);
            var outputSignal = im2Col.Multiply(_filter);

            outputSignal.AddToEachRow(_bias);
            var outputTensor = outputSignal.ConvertTo4DTensor(newHeight, newWidth);

            var graphData = new Tensor4DGraphData(outputTensor);

            _AddNextGraphAction(context, graphData, () => new Backpropagation(this, im2Col, inputWidth, inputHeight, newWidth, newHeight));
        }
Ejemplo n.º 3
0
        public override void ExecuteForward(IContext context)
        {
            var input  = context.Data;
            var tensor = input.GetMatrix().ReshapeAs4DTensor(input.Rows, input.Columns, input.Depth);

            var(output, index) = tensor.MaxPool(_filterWidth, _filterHeight, _xStride, _yStride, true);

//#if DEBUG
//			Debug.Assert(output.ReshapeAsVector().IsEntirelyFinite());
//			Debug.Assert(index.ReshapeAsVector().IsEntirelyFinite());
//#endif

            var graphData = new Tensor4DGraphData(output);

            _AddNextGraphAction(context, graphData, () => new Backpropagation(this, index, tensor.ColumnCount, tensor.RowCount, output.ColumnCount, output.RowCount, output.Depth, _filterWidth, _filterHeight, _xStride, _yStride));
        }
Ejemplo n.º 4
0
        public override IMiniBatch Get(IExecutionContext executionContext, IReadOnlyList <int> rows)
        {
            var data = _GetRows(rows)
                       .Select(r => (_dataColumnIndex.Select(i => ((FloatTensor)r.Data[i]).GetAsRaw()).ToList(), ((FloatVector)r.Data[_dataTargetIndex]).Data))
                       .ToList()
            ;
            var inputList = new List <IGraphData>();

            for (var i = 0; i < _dataColumnIndex.Length; i++)
            {
                var i1     = i;
                var input  = _lap.CreateMatrix(InputSize, data.Count, (x, y) => data[y].Item1[i1][x]);
                var tensor = new Tensor4DGraphData(input, Height, Width, Depth);
                inputList.Add(tensor);
            }
            var output = OutputSize > 0 ? _lap.CreateMatrix(data.Count, OutputSize, (x, y) => data[x].Item2[y]) : null;

            return(new MiniBatch(rows, this, inputList, new MatrixGraphData(output)));
        }