/// <summary>
 /// Looks for a predictor among tagged predictors.
 /// If the tag ends by .zip, it assumes it is a file.
 /// </summary>
 /// <param name="env">environment</param>
 /// <param name="input">IDataView</param>
 /// <param name="tag">tag name</param>
 /// <returns>predictor</returns>
 public static IPredictor GetTaggedPredictor(IHostEnvironment env, IDataView input, string tag)
 {
     if (string.IsNullOrEmpty(tag))
     {
         throw env.Except("tag must not be null.");
     }
     if (tag.EndsWith(".zip"))
     {
         using (Stream modelStream = new FileStream(tag, FileMode.Open, FileAccess.Read))
         {
             var ipred = ComponentCreation.LoadPredictorOrNull(env, modelStream);
             return(ipred);
         }
     }
     else
     {
         var tagged = TagHelper.EnumerateTaggedView(true, input).Where(c => c.Item1 == tag);
         if (!tagged.Any())
         {
             throw env.Except("Unable to find any view with tag '{0}'.", tag);
         }
         if (tagged.Skip(1).Any())
         {
             var allTagged = TagHelper.EnumerateTaggedView(true, input).ToArray();
             throw env.Except("Ambiguous tag '{0}' - {1}/{2}.", tag,
                              allTagged.Where(c => c.Item1 == tag).Count(), allTagged.Length);
         }
         var predictor = tagged.First().Item2.TaggedPredictor;
         if (predictor == null)
         {
             env.Except("Tagged view '{0}' does not host a predictor.", tag);
         }
         return(predictor);
     }
 }
示例#2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="env">environment</param>
        /// <param name="modelStream">stream</param>
        /// <param name="output">name of the output column</param>
        /// <param name="outputIsFloat">output is a gloat (true) or a vector of floats (false)</param>
        /// <param name="conc">number of concurrency threads</param>
        /// <param name="features">features name</param>
        public ValueMapperPredictionEngineFloat(IHostEnvironment env, Stream modelStream,
                                                string output   = "Probability", bool outputIsFloat = true, int conc = 1,
                                                string features = "Features")
        {
            _env = env;
            if (_env == null)
            {
                throw Contracts.Except("env must not be null");
            }
            var inputs = new FloatVectorInput[0];
            var view   = ComponentCreation.CreateStreamingDataView <FloatVectorInput>(_env, inputs);

            long modelPosition = modelStream.Position;

            _predictor = ComponentCreation.LoadPredictorOrNull(_env, modelStream);
            if (_predictor == null)
            {
                throw _env.Except("Unable to load a model.");
            }
            modelStream.Seek(modelPosition, SeekOrigin.Begin);
            _transforms = ComponentCreation.LoadTransforms(_env, modelStream, view);
            if (_transforms == null)
            {
                throw _env.Except("Unable to load a model.");
            }

            var data = _env.CreateExamples(_transforms, features);

            if (data == null)
            {
                throw _env.Except("Cannot create rows.");
            }
            var scorer = _env.CreateDefaultScorer(data, _predictor);

            if (scorer == null)
            {
                throw _env.Except("Cannot create a scorer.");
            }

            _valueMapper = new ValueMapperFromTransformFloat <VBuffer <float> >(_env,
                                                                                scorer, features, output, conc: conc);
            if (_valueMapper == null)
            {
                throw _env.Except("Cannot create a mapper.");
            }
            if (outputIsFloat)
            {
                _mapper       = _valueMapper.GetMapper <VBuffer <float>, float>();
                _mapperVector = null;
            }
            else
            {
                _mapper       = null;
                _mapperVector = _valueMapper.GetMapper <VBuffer <float>, VBuffer <float> >();
            }
        }
示例#3
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="env">environment</param>
        /// <param name="modelStream">stream</param>
        /// <param name="conc">number of concurrency threads</param>
        /// <param name="features">features column</param>
        public ValueMapperPredictionEngine(IHostEnvironment env, Stream modelStream,
                                           int conc = 1, string features = "Features")
        {
            _env = env;
            if (_env == null)
            {
                throw Contracts.Except("env must not be null");
            }
            var inputs = new TRowValue[0];
            var view   = ComponentCreation.CreateStreamingDataView <TRowValue>(_env, inputs);

            long modelPosition = modelStream.Position;

            _predictor = ComponentCreation.LoadPredictorOrNull(_env, modelStream);
            if (_predictor == null)
            {
                throw _env.Except("Unable to load a model.");
            }
            modelStream.Seek(modelPosition, SeekOrigin.Begin);
            _transforms = ComponentCreation.LoadTransforms(_env, modelStream, view);
            if (_transforms == null)
            {
                throw _env.Except("Unable to load a model.");
            }

            var data = _env.CreateExamples(_transforms, features);

            if (data == null)
            {
                throw _env.Except("Cannot create rows.");
            }
            var scorer = _env.CreateDefaultScorer(data, _predictor);

            if (scorer == null)
            {
                throw _env.Except("Cannot create a scorer.");
            }
            _CreateMapper(scorer, conc);
        }