| File: Tuner\GridSearchTuner.cs | Web Access |
| Project: src\src\Microsoft.ML.SearchSpace\Microsoft.ML.SearchSpace.csproj (Microsoft.ML.SearchSpace) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using System.Linq; namespace Microsoft.ML.SearchSpace.Tuner { internal sealed class GridSearchTuner { private readonly SearchSpace _searchSpace; private readonly int _stepSize; public GridSearchTuner(SearchSpace searchSpace, int stepSize = 10) { _searchSpace = searchSpace; _stepSize = stepSize; } public IEnumerable<Parameter> Propose() { var steps = _searchSpace.Step.Select(x => x ?? _stepSize) .Select(x => Enumerable.Range(0, x).Select(i => i * 1.0 / x).ToArray()); foreach (var featureVec in CartesianProduct(steps)) { yield return _searchSpace.SampleFromFeatureSpace(featureVec); } } private IEnumerable<double[]> CartesianProduct(IEnumerable<double[]> arrays) { if (arrays.Count() == 1) { foreach (var i in arrays.First()) { yield return new[] { i }; } } else { foreach (var i in arrays.First()) { foreach (var i_s in CartesianProduct(arrays.Skip(1))) { yield return new[] { i }.Concat(i_s).ToArray(); } } } } } }