public override void Test(string datasetFile)
        {
            var dataSource = CreateDataSource(datasetFile);

            var testingResultResponse = new TestingResultResponse();

            const int minibatchSize    = 1;
            var       currentMinibatch = 0;

            while (true)
            {
                var minibatchData = dataSource.MinibatchSource.GetNextMinibatch(minibatchSize, _device);
                var inputDataMap  = new Dictionary <Variable, Value>()
                {
                    { _modelWrapper.Input, minibatchData[dataSource.FeatureStreamInfo].data }
                };
                var outputDataMap = new Dictionary <Variable, Value>()
                {
                    { _modelWrapper.EvaluationOutput, null }
                };

                _modelWrapper.Model.Evaluate(inputDataMap, outputDataMap, _device);
                var outputVal  = outputDataMap[_modelWrapper.EvaluationOutput];
                var actual     = outputVal.GetDenseData <float>(_modelWrapper.EvaluationOutput);
                var labelBatch = minibatchData[dataSource.LabelStreamInfo].data;
                var expected   = labelBatch.GetDenseData <float>(_modelWrapper.Model.Output);

                Func <IEnumerable <IList <float> >, IEnumerable <int> > maxSelector =
                    (collection) => collection.Select(x => x.IndexOf(x.Max()));

                var actualLabels   = maxSelector(actual);
                var expectedLabels = maxSelector(expected);

                testingResultResponse.Correct += actualLabels.Zip(expectedLabels, (a, b) => a.Equals(b) ? 1 : 0).Sum();
                testingResultResponse.Total   += actualLabels.Count();

                currentMinibatch++;
                if (minibatchData.Values.Any(x => x.sweepEnd))
                {
                    OnTestingFinished(testingResultResponse);
                    break;
                }
            }
        }
Exemple #2
0
 protected void OnTestingFinished(TestingResultResponse testingResultResponse)
 => TestingFinished?.Invoke(this, testingResultResponse);
Exemple #3
0
 private static void TestingFinished(
     object sender, TestingResultResponse testingResultResponse) =>
 WriteLine(
     $"Testing finished. " +
     $"Correctly answered {testingResultResponse.Correct} of {testingResultResponse.Total}, " +
     $"accuracy = {testingResultResponse.Accuracy * 100}%");