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