예제 #1
0
            private Delegate MakeGetter <T>(IRow input, ColumnType columnType)
            {
                _host.AssertValue(input);
                _host.Assert(typeof(T) == columnType.ItemType.RawType);

                var srcTensorGetters = GetTensorValueGetters(input);

                ValueGetter <VBuffer <T> > valuegetter = (ref VBuffer <T> dst) =>
                {
                    var runner = _session.GetRunner();
                    for (int i = 0; i < _inputColIndices.Length; i++)
                    {
                        var inputName = _inputColNames[i];
                        runner.AddInput(inputName, srcTensorGetters[i].GetTensor());
                    }

                    var tensors = runner.Fetch(_outputColName).Run();

                    Contracts.Assert(tensors.Length > 0);

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

                    TensorFlowUtils.FetchData <T>(tensors[0].Data, values);
                    dst = new VBuffer <T>(values.Length, values, dst.Indices);
                };

                return(valuegetter);
            }
            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 values  = dst.Values;
                    var indices = dst.Indices;
                    if (Utils.Size(values) < _parent.OutputTypes[iinfo].VectorSize)
                    {
                        values  = new T[_parent.OutputTypes[iinfo].VectorSize];
                        indices = new int[_parent.OutputTypes[iinfo].VectorSize];
                    }

                    TensorFlowUtils.FetchData <T>(outputCache.Outputs[_parent.Outputs[iinfo]].Data, values);
                    dst = new VBuffer <T>(values.Length, values, indices);
                };

                return(valuegetter);
            }
예제 #3
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 tensorSize = tensor.Shape.Where(x => x > 0).Aggregate((x, y) => x * y);

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

                    TensorFlowUtils.FetchData <T>(tensor.Data, values);
                    dst = new VBuffer <T>(values.Length, values, dst.Indices);
                };

                return(valuegetter);
            }