public void RandomIndexSampler_Sample_SampleSize_Too_Large() { var values = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 }; var sampleSize = 100; var sut = new RandomIndexSampler <int>(42); var sampleIndices = sut.Sample(values, sampleSize); }
public void RandomIndexSampler_Sample_Indexed_DataIndices_Too_Large() { var values = new int[] { 1, 1, 1 }; var indices = new int[] { 0, 1, 2, 3, 10, 11, 12, 13, 18, 19, 20 }; var sampleSize = 2; var sut = new RandomIndexSampler <int>(42); var sampleIndices = sut.Sample(values, sampleSize, indices); }
public void RandomIndexSampler_Sample() { var values = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 }; var sampleSize = values.Length / 2; var sut = new RandomIndexSampler <int>(42); var sampleIndices = sut.Sample(values, sampleSize); var actual = values.GetIndices(sampleIndices); var expected = new int[] { 1, 2, 1, 2, 1, 3, 1, 2, 2, 1, 2, }; CollectionAssert.AreEqual(expected, actual); }
public void RandomIndexSampler_Sample_Indexed() { var values = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 }; var indices = new int[] { 0, 1, 2, 3, 10, 11, 12, 13, 18, 19, 20 }; var sampleSize = 6; var sut = new RandomIndexSampler <int>(42); var sampleIndices = sut.Sample(values, sampleSize, indices); var actual = values.GetIndices(sampleIndices); var expected = new int[] { 3, 2, 1, 1, 1, 2 }; CollectionAssert.AreEqual(expected, actual); }
public void SharpLearning_With_Cntk_Example() { // Load data var(observations, targets) = DataSetUtilities.LoadWinequalityWhite(); // transform data for neural net var transform = new MinMaxTransformer(0.0, 1.0); transform.Transform(observations, observations); var featureCount = observations.ColumnCount; var observationCount = observations.RowCount; var targetCount = 1; var inputShape = new int[] { featureCount, 1 }; var outputShape = new int[] { targetCount }; // Convert data to float, and wrap as minibatch data. var observationsFloat = observations.Data().Select(v => (float)v).ToArray(); var observationsData = new MemoryMinibatchData(observationsFloat, inputShape, observationCount); var targetsFloat = targets.Select(v => (float)v).ToArray(); var targetsData = new MemoryMinibatchData(targetsFloat, outputShape, observationCount); var dataType = DataType.Float; var device = DeviceDescriptor.CPUDevice; // setup input and target variables. var inputVariable = Layers.Input(inputShape, dataType); var targetVariable = Variable.InputVariable(outputShape, dataType); // setup name to variable var nameToVariable = new Dictionary <string, Variable> { { "observations", inputVariable }, { "targets", targetVariable }, }; // Get cross validation folds. var sampler = new RandomIndexSampler <double>(seed: 24); var crossValidationIndexSets = CrossValidationUtilities .GetKFoldCrossValidationIndexSets(sampler, foldCount: 10, targets: targets); var predictions = new double[observationCount]; // Run cross validation loop. foreach (var set in crossValidationIndexSets) { // setup data. var trainingNameToData = new Dictionary <string, MemoryMinibatchData> { { "observations", observationsData.GetSamples(set.trainingIndices) }, { "targets", targetsData.GetSamples(set.trainingIndices) } }; var validationNameToData = new Dictionary <string, MemoryMinibatchData> { { "observations", observationsData.GetSamples(set.validationIndices) }, { "targets", targetsData.GetSamples(set.validationIndices) } }; var trainSource = new MemoryMinibatchSource(nameToVariable, trainingNameToData, seed: 232, randomize: true); var validationSource = new MemoryMinibatchSource(nameToVariable, validationNameToData, seed: 232, randomize: false); // Create model and fit. var model = CreateModel(inputVariable, targetVariable, targetCount, dataType, device); model.Fit(trainSource, batchSize: 128, epochs: 10); // Predict. var predictionsRaw = model.Predict(validationSource); var currentPredictions = predictionsRaw.Select(v => (double)v.Single()).ToArray(); // set cross-validation predictions var validationIndices = set.validationIndices; for (int i = 0; i < validationIndices.Length; i++) { predictions[validationIndices[i]] = currentPredictions[i]; } } Trace.WriteLine(FormatErrorString(targets, predictions)); }