private Delegate MakeGetter <T>(IRow input)
            {
                _host.AssertValue(input);
                _host.Assert(typeof(T) == _outputItemRawType);

                ValueGetter <VBuffer <T> > valueGetter = (ref VBuffer <T> dst) =>
                {
                    _idvToTensorAdapter.InitializeValueGetters(input);
                    var inputTensors = new List <Tensor> {
                        _idvToTensorAdapter.GetTensor()
                    };
                    var outputTensors = _parent.Model.Run(inputTensors);
                    Contracts.Assert(outputTensors.Count() > 0);

                    var values = dst.Values;
                    if (Utils.Size(values) < _outputColType.VectorSize)
                    {
                        values = new T[_outputColType.VectorSize];
                    }

                    OnnxUtils.CopyTo(outputTensors[0], values);
                    dst = new VBuffer <T>(values.Length, values, dst.Indices);
                };

                return(valueGetter);
            }
예제 #2
0
            private Delegate MakeGetter <T>(IRow input, int iinfo, ITensorValueGetter[] srcTensorGetters, string[] activeOutputColNames, OutputCache outputCache)
            {
                Host.AssertValue(input);
                ValueGetter <VBuffer <T> > valuegetter = (ref VBuffer <T> dst) =>
                {
                    UpdateCacheIfNeeded(input.Position, srcTensorGetters, activeOutputColNames, outputCache);
                    var tensor = outputCache.Outputs[_parent.Outputs[iinfo]];
                    var editor = VBufferEditor.Create(ref dst, tensor.GetSize());
                    OnnxUtils.CopyTo(tensor, editor.Values);
                    dst = editor.Commit();
                };

                return(valuegetter);
            }
예제 #3
0
            private Delegate MakeGetter <T>(IRow input)
            {
                _host.AssertValue(input);
                _host.Assert(typeof(T) == _outputItemRawType);

                ValueGetter <VBuffer <T> > valueGetter = (ref VBuffer <T> dst) =>
                {
                    _idvToTensorAdapter.InitializeValueGetters(input);
                    var inputTensors = new List <Tensor> {
                        _idvToTensorAdapter.GetTensor()
                    };
                    var outputTensors = _parent.Model.Run(inputTensors);
                    Contracts.Assert(outputTensors.Count() > 0);

                    var editor = VBufferEditor.Create(ref dst, _outputColType.VectorSize);
                    OnnxUtils.CopyTo(outputTensors[0], editor.Values);
                    dst = editor.Commit();
                };

                return(valueGetter);
            }