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);
            }
Exemple #2
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);
            }