标签: hyperparameters

如何将Keras模型插入scikit-learn管道?

我正在使用Scikit-Learn自定义管道(sklearn.pipeline.Pipeline)和RandomizedSearchCV超参数优化.这非常有效.

现在我想插入一个Keras模型作为管道的第一步.应优化模型的参数.然后,计算(拟合)的Keras模型应该在管道中通过其他步骤使用,因此我认为我必须将模型存储为全局变量,以便其他管道步骤可以使用它.这是正确的吗?

我知道Keras为Scikit-Learn API提供了一些包装器,但问题是这些包装器已经进行了分类/回归,但我只想计算Keras模型而没有别的.

如何才能做到这一点?

例如,我有一个返回模型的方法:

def create_model(file_path, argument2,...):
    ...
    return model
Run Code Online (Sandbox Code Playgroud)

该方法需要一些固定的参数,如文件路径等,但不需要(或可以忽略)X和y.应优化模型的参数(层数等).

pipeline machine-learning scikit-learn hyperparameters keras

23
推荐指数
1
解决办法
7582
查看次数

我们应该以什么顺序调整神经网络中的超参数?

我有一个非常简单的ANN使用Tensorflow和AdamOptimizer来解决回归问题,现在我正在调整所有超参数.

现在,我看到了许多不同的超参数,我必须调整:

  • 学习率:初始学习率,学习率衰减
  • AdamOptimizer需要4个参数(学习率,beta1,beta2,epsilon),所以我们需要调整它们 - 至少epsilon
  • 批量大小
  • 迭代的nb
  • Lambda L2正则化参数
  • 神经元数量,层数
  • 什么样的激活函数用于隐藏层,用于输出层
  • 辍学参数

我有两个问题:

1)你看到我可能忘记的任何其他超参数吗?

2)目前,我的调音非常"手动",我不确定我是不是以正确的方式做所有事情.是否有特殊的顺序来调整参数?例如学习率首先,然后批量大小,然后......我不确定所有这些参数是否独立 - 事实上,我很确定其中一些参数不是.哪些明显独立,哪些明显不独立?我们应该把它们调在一起吗?是否有任何纸张或文章谈论正确调整特殊订单中的所有参数?

编辑:这是我得到的不同初始学习率,批量大小和正则化参数的图表.紫色曲线对我来说是完全奇怪的...因为成本随着其他方式慢慢下降,但它却以较低的准确率陷入困境.该模型是否可能陷入局部最小值?

准确性

成本

对于学习率,我使用了衰变:LR(t)= LRI/sqrt(epoch)

谢谢你的帮助 !保罗

neural-network hyperparameters tensorflow

19
推荐指数
2
解决办法
7272
查看次数

Pytorch模型的超参数优化

为Pytorch模型执行超参数优化的最佳方法是什么?实施例如自己随机搜索?使用Skicit Learn?或者还有什么我不知道的?

machine-learning deep-learning hyperparameters pytorch

18
推荐指数
4
解决办法
7726
查看次数

通过GridSearchCV()探索svm.SVC()超参数的有效值范围是多少?

我遇到的问题是我的超参数svm.SVC()太宽,以至于GridSearchCV()永远不会完成!一个想法是改为使用RandomizedSearchCV().但同样,我的数据集相对较大,因此500次迭代需要大约1小时!

我的问题是,为了阻止浪费资源,GridSearchCV(或RandomizedSearchCV)的一个好的设置(就每个超参数的值范围而言)是什么?

换句话说,如何判断C100以上的值是否有意义和/或1的步长既不大也不小?很感谢任何形式的帮助.这是我目前正在使用的设置:

parameters = {
    'C':            np.arange( 1, 100+1, 1 ).tolist(),
    'kernel':       ['linear', 'rbf'],                   # precomputed,'poly', 'sigmoid'
    'degree':       np.arange( 0, 100+0, 1 ).tolist(),
    'gamma':        np.arange( 0.0, 10.0+0.0, 0.1 ).tolist(),
    'coef0':        np.arange( 0.0, 10.0+0.0, 0.1 ).tolist(),
    'shrinking':    [True],
    'probability':  [False],
    'tol':          np.arange( 0.001, 0.01+0.001, 0.001 ).tolist(),
    'cache_size':   [2000],
    'class_weight': [None],
    'verbose':      [False],
    'max_iter':     [-1],
    'random_state': [None],
    }

model = grid_search.RandomizedSearchCV( n_iter              = 500,
                                        estimator           = svm.SVC(),
                                        param_distributions = parameters,
                                        n_jobs              = 4, …
Run Code Online (Sandbox Code Playgroud)

machine-learning svm scikit-learn hyperparameters

15
推荐指数
2
解决办法
2万
查看次数

张量流模型的超参数调整

我之前使用过Scikit-learn的GridSearchCV来优化我的模型的超参数,但只是想知道是否存在类似的工具来优化Tensorflow的超参数(例如,时期数,学习率,滑动窗口大小等)

如果没有,我如何实现一个有效运行所有不同组合的片段?

python convolution hyperparameters tensorflow

15
推荐指数
2
解决办法
1万
查看次数

如何优雅地将Sklearn的GridseachCV的最佳参数传递给另一个模型?

我通过网格搜索CV为我的KNN估算器找到了一组最好的超参数:

>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我想用这些新发现的参数训练我的最终估算器.有没有办法直接提供上面的超参数字典?我试过这个:

>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)
Run Code Online (Sandbox Code Playgroud)

但相反,希望的结果new_knn_model只是将整个字典作为模型的第一个参数,并将其余的作为默认值:

>>> knn_model
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1,
           n_neighbors={'n_neighbors': 3, 'metric': 'manhattan', 'algorithm': 'auto'},
           p=2, weights='uniform')
Run Code Online (Sandbox Code Playgroud)

确实令人失望.

python machine-learning scikit-learn hyperparameters grid-search

12
推荐指数
2
解决办法
5502
查看次数

如何在 Optuna 中优化多个指标

如何在objectiveOptuna 功能内同时优化多个指标。例如,我正在训练 LGBM 分类器,希望为所有常见分类指标(如 F1、精度、召回率、准确度、AUC 等)找到最佳超参数集。

def objective(trial):
    # Train
    gbm = lgb.train(param, dtrain)

    preds = gbm.predict(X_test)
    pred_labels = np.rint(preds)
    # Calculate metrics
    accuracy = sklearn.metrics.accuracy_score(y_test, pred_labels)
    recall = metrics.recall_score(pred_labels, y_test)
    precision = metrics.precision_score(pred_labels, y_test)
    f1 = metrics.f1_score(pred_labels, y_test, pos_label=1)

    ...
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

python machine-learning hyperparameters optuna

10
推荐指数
1
解决办法
6899
查看次数

超参数调整为Tensorflow

我正在为Tensorflow(不是Keras或Tflearn)中直接编写的代码搜索超参数调整包.你能提一些建议吗?

optimization machine-learning bayesian hyperparameters tensorflow

9
推荐指数
1
解决办法
5941
查看次数

比较在scikit-learn中调整超参数的方法

这篇文章是关于LogisticRegressionCV,GridSearchCV和cross_val_score之间的区别。请考虑以下设置:

import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
from sklearn.model_selection import train_test_split, GridSearchCV, \
     StratifiedKFold, cross_val_score
from sklearn.metrics import confusion_matrix

read = load_digits()
X, y = read.data, read.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
Run Code Online (Sandbox Code Playgroud)

在惩罚逻辑回归中,我们需要设置控制正则化的参数C。scikit-learn中有3种通过交叉验证找到最佳C的方法。

Logistic回归

clf = LogisticRegressionCV (Cs = 10, penalty = "l1",
    solver = "saga", scoring = "f1_macro")
clf.fit(X_train, y_train)
confusion_matrix(y_test, clf.predict(X_test))
Run Code Online (Sandbox Code Playgroud)

旁注:文档指出,SAGA和LIBLINEAR是L1惩罚的唯一优化器,而SAGA对于大型数据集则更快。不幸的是,热启动仅适用于Newton-CG和LBFGS。

GridSearchCV

clf = LogisticRegression (penalty = "l1", solver = "saga", warm_start = True)
clf …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn cross-validation hyperparameters

9
推荐指数
1
解决办法
615
查看次数

如何将optuna的study.optimize verbosity设置为0?

我想将 optuna 的 Study.optimize verbosity 设置为 0。我想optuna.logging.set_verbosity(0)可能会这样做,但我仍然得到Trial 0 finished with value ....每次试验的更新

这样做的正确方法是什么?不幸的是,对文档的大量搜索仍然只能得到上述方法。

提前谢谢了

machine-learning scikit-learn hyperparameters optuna

9
推荐指数
1
解决办法
9008
查看次数