コード例 #1
0
        private static void TrainModel(DeviceDescriptor device, PreparedDataInfo preparedData,
                                       NetworkBuildOutput buildOutput, Trainer trainer)
        {
            const uint minibatchSize = 64;
            const int  outputFrequencyInMinibatches = 20;
            var        i      = 0;
            var        epochs = 5;

            while (epochs > 0)
            {
                var minibatchData = preparedData.MinibatchSource.GetNextMinibatch(minibatchSize, device);
                var arguments     = new Dictionary <Variable, MinibatchData>
                {
                    { buildOutput.Input, minibatchData[preparedData.FeatureStreamInfo] },
                    { buildOutput.Labels, minibatchData[preparedData.LabelStreamInfo] }
                };

                trainer.TrainMinibatch(arguments, device);
                PrintTrainingProgress(trainer, i++, outputFrequencyInMinibatches);

                // MinibatchSource is created with MinibatchSource.InfinitelyRepeat.
                // Batching will not end. Each time minibatchSource completes an sweep (epoch),
                // the last minibatch data will be marked as end of a sweep. We use this flag
                // to count number of epochs.
                if (MiniBatchDataIsSweepEnd(minibatchData.Values))
                {
                    epochs--;
                }
            }
        }
コード例 #2
0
        private static Trainer CreateTrainer(NetworkBuildOutput buildOutput)
        {
            var parameters        = buildOutput.ClassifierOutput.Parameters();
            var parameterLearners = CreateLerners(parameters);
            var trainer           = Trainer.CreateTrainer(buildOutput.ClassifierOutput, buildOutput.TrainingLoss,
                                                          buildOutput.Prediction, parameterLearners);

            return(trainer);
        }
コード例 #3
0
        public NetworkBuildOutput Build(DeviceDescriptor device, string featureStreamName, string labelsStreamName,
                                        string classifierName, int numClasses, int[] imageDim)
        {
            var buildOutput = new NetworkBuildOutput();

            buildOutput.Input            = CNTKLib.InputVariable(imageDim, DataType.Float, featureStreamName);
            buildOutput.ScaledInput      = CNTKLib.ElementTimes(Constant.Scalar(0.00390625f, device), buildOutput.Input);
            buildOutput.ClassifierOutput = CreateConvolutionNeuralNetwork(buildOutput.ScaledInput,
                                                                          numClasses, device, classifierName);
            buildOutput.Labels       = CNTKLib.InputVariable(new[] { numClasses }, DataType.Float, labelsStreamName);
            buildOutput.TrainingLoss = CNTKLib.CrossEntropyWithSoftmax(new Variable(buildOutput.ClassifierOutput),
                                                                       buildOutput.Labels, "lossFunction");
            buildOutput.Prediction = CNTKLib.ClassificationError(new Variable(buildOutput.ClassifierOutput),
                                                                 buildOutput.Labels, "classificationError");
            return(buildOutput);
        }
コード例 #4
0
 private static void SaveModel(NetworkBuildOutput buildOutput, string modelFile)
 {
     buildOutput.ClassifierOutput.Save(modelFile);
 }