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; } } }
protected void OnTestingFinished(TestingResultResponse testingResultResponse) => TestingFinished?.Invoke(this, testingResultResponse);
private static void TestingFinished( object sender, TestingResultResponse testingResultResponse) => WriteLine( $"Testing finished. " + $"Correctly answered {testingResultResponse.Correct} of {testingResultResponse.Total}, " + $"accuracy = {testingResultResponse.Accuracy * 100}%");