【问题标题】:Sklearn MLP Classifier Hyperparameter Optimization (RandomizedSearchCV)Sklearn MLP 分类器超参数优化(RandomizedSearchCV)
【发布时间】:2019-02-01 09:46:29
【问题描述】:

我设置了以下参数:

parameter_space = {
    'hidden_layer_sizes': [(sp_randint(100,600),sp_randint(100,600),), (sp_randint(100,600),)],
    'activation': ['tanh', 'relu', 'logistic'],
    'solver': ['sgd', 'adam', 'lbfgs'],
    'alpha': stats.uniform(0.0001, 0.9),
    'learning_rate': ['constant','adaptive']}

除了 hidden_​​layer_sizes 之外的所有参数都按预期工作。但是,拟合这个 RandomizedSearchCV 模型并显示它的详细文本表明它将 hidden_​​layer_sizes 视为:

hidden_layer_sizes=(<scipy.stats._distn_infrastructure.rv_frozen object 然后继续扔:TypeError: '<=' not supported between instances of 'rv_frozen' and 'int'

得到这个结果,而不是预期的 1 或 2 层 MLP,隐藏层神经元在 100 到 600 之间。有什么想法/其他相关提示吗?

【问题讨论】:

    标签: python machine-learning scikit-learn hyperparameters


    【解决方案1】:

    sp_randint返回rv_discrete类的实例/一个randint对象,为了生成随机数,正确的语法应该是sp_randint.rvs(low, high, size)。 为了使其工作,您需要定义parameter_space,如下所示:

    parameter_space = { 'hidden_layer_sizes': [(sp_randint.rvs(100,600,1),sp_randint.rvs(100,600,1),), (sp_randint.rvs(100,600,1),)], 'activation': ['tanh', 'relu', 'logistic'], 'solver': ['sgd', 'adam', 'lbfgs'], 'alpha': uniform(0.0001, 0.9), 'learning_rate': ['constant','adaptive']}

    【讨论】:

    • 感谢您的详细解释。
    • 有没有办法确保为 RandomizedSearchCV 的每次迭代为 hidden_​​layer_sizes 选择随机值?目前,它预先计算这些随机值一次,并且它们在各种迭代中保持不变
    • 我们真的想在 MLP 的每次迭代中改变 hidden_​​layer_sizes(MLP 的结构),那么我们将如何解释结果?我认为最好让它随机生成一次并在所有迭代中保持固定。
    猜你喜欢
    • 2019-02-01
    • 2019-09-04
    • 1970-01-01
    • 2021-11-15
    • 2017-08-08
    • 2019-04-21
    • 2018-11-12
    • 2020-10-23
    • 2011-07-03
    相关资源
    最近更新 更多