public static PreparedLearningDataset ParseFromGZipedDefinitionsForCntk(ITrainingDatasetDefinition datasetDefinition)
        {
            var output = new PreparedLearningDataset();

            output.ValueToLabelMap     = BuildEMNISTValueToLabelMapFor(datasetDefinition);
            output.TrainingDatasetPath = ReadEMNISTInCntkFormat(datasetDefinition, output.ValueToLabelMap, true);
            output.TestingDatasetPath  = ReadEMNISTInCntkFormat(datasetDefinition, output.ValueToLabelMap, false);

            return(output);
        }
        private static char CntkLabelFromLabelStream(int[] labelStream, PreparedLearningDataset preparedDataset)
        {
            byte counter = preparedDataset.ValueToLabelMap.Keys.OrderBy(k => k).FirstOrDefault();

            foreach (var item in labelStream)
            {
                if (item == 1)
                {
                    return(preparedDataset.ValueToLabelMap[counter]);
                }
                counter++;
            }

            throw new InvalidOperationException();
        }
        private CntkDatasetRow ParseLineAsCntkDatasetRow(string readLine,
                                                         ITrainingDatasetDefinition datasetDefinition, PreparedLearningDataset dataset)
        {
            var rowStreams  = readLine.Split('|').Skip(1).ToList();
            var labelStream = GetDatasetStreamItems(rowStreams[0], "labels");

            return(new CntkDatasetRow
            {
                DatasetName = datasetDefinition.DataSetName,
                ImagePixels = GetDatasetStreamItems(rowStreams[1], "features"),
                Label = CntkLabelFromLabelStream(labelStream, dataset)
            });
        }