- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我陷入了“困境”。这是我的代码的结构:
n_jobs=-1
调用 RandomizedSearchCV
或 GridSearchCV
的方法。
create_model
,用于创建由 KerasClassifier
或 KerasRegressor
调用的神经网络模型(请参阅 this 教程) 我收到一条错误消息,指出无法对本地对象进行 pickle。如果我更改n_jobs=1
,那么就没有问题。所以我怀疑问题出在本地函数和并行处理上。有解决办法吗?经过一番谷歌搜索后,似乎序列化器dill
可以在这里工作(我什至找到了一个名为multiprocessing_on_dill
的包)。但我目前依赖于 sklearn
的软件包。
最佳答案
我找到了问题的“解决方案”。我真的很困惑为什么这些例子 here与 n_jobs=-1
合作,但我的代码没有。问题似乎出在本地函数 create_model
上驻留在子类的方法中。如果我将本地函数设置为子类的方法,我可以设置 n_jobs > 1
.
回顾一下,这是我的代码的结构:
RandomizedSearchCV
的方法或GridSearchCV
与 n_jobs=-1
.create_model
,创建由 KerasClassifier
调用的神经网络模型或KerasRegressor
代码的总体思路:
from abc import ABCMeta
import numpy as np
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
class MLAlgorithms(metaclass=ABCMeta):
def __init__(self, X_train, y_train, X_test, y_test=None):
"""
Constructor with train and test data.
:param X_train: Train descriptor data
:param y_train: Train observed data
:param X_test: Test descriptor data
:param y_test: Test observed data
"""
...
@abstractmethod
def setmlalg(self, mlalg):
"""
Sets a machine learning algorithm.
:param mlalg: Dictionary of the machine learning algorithm.
"""
pass
@abstractmethod
def fitmlalg(self, mlalg, rid=None):
"""
Fits a machine learning algorithm.
:param mlalg: Machine learning algorithm
"""
pass
class MLClassification(MLAlgorithms):
"""
Main class for classification machine learning algorithms.
"""
def setmlalg(self, mlalg):
"""
Sets a classification machine learning algorithm.
:param mlalg: Dictionary of the classification machine learning algorithm.
"""
...
def fitmlalg(self, mlalg):
"""
Fits a classification machine learning algorithm.
:param mlalg: Classification machine learning algorithm
"""
...
# Function to create model, required for KerasClassifier
def create_model(self, n_layers=1, units=10, input_dim=10, output_dim=1,
optimizer="rmsprop", loss="binary_crossentropy",
kernel_initializer="glorot_uniform", activation="sigmoid",
kernel_regularizer="l2", kernel_regularizer_weight=0.01,
lr=0.01, momentum=0.0, decay=0.0, nesterov=False, rho=0.9, epsilon=1E-8,
beta_1=0.9, beta_2=0.999, schedule_decay=0.004):
from keras.models import Sequential
from keras.layers import Dense
from keras import regularizers, optimizers
# Create model
if kernel_regularizer.lower() == "l1":
kernel_regularizer = regularizers.l1(l=kernel_regularizer_weight)
elif kernel_regularizer.lower() == "l2":
kernel_regularizer = regularizers.l2(l=kernel_regularizer_weight)
elif kernel_regularizer.lower() == "l1_l2":
kernel_regularizer = regularizers.l1_l2(l1=kernel_regularizer_weight, l2=kernel_regularizer_weight)
else:
print("Warning: Kernel regularizer {0} not supported. Using default 'l2' regularizer.".format(
kernel_regularizer))
kernel_regularizer = regularizers.l2(l=kernel_regularizer_weight)
if optimizer.lower() == "sgd":
optimizer = optimizers.sgd(lr=lr, momentum=momentum, decay=decay, nesterov=nesterov)
elif optimizer.lower() == "rmsprop":
optimizer = optimizers.rmsprop(lr=lr, rho=rho, epsilon=epsilon, decay=decay)
elif optimizer.lower() == "adagrad":
optimizer = optimizers.adagrad(lr=lr, epsilon=epsilon, decay=decay)
elif optimizer.lower() == "adadelta":
optimizer = optimizers.adadelta(lr=lr, rho=rho, epsilon=epsilon, decay=decay)
elif optimizer.lower() == "adam":
optimizer = optimizers.adam(lr=lr, beta_1=beta_1, beta_2=beta_2, epsilon=epsilon, decay=decay)
elif optimizer.lower() == "adamax":
optimizer = optimizers.adamax(lr=lr, beta_1=beta_1, beta_2=beta_2, epsilon=epsilon, decay=decay)
elif optimizer.lower() == "nadam":
optimizer = optimizers.nadam(lr=lr, beta_1=beta_1, beta_2=beta_2, epsilon=epsilon,
schedule_decay=schedule_decay)
else:
print("Warning: Optimizer {0} not supported. Using default 'sgd' optimizer.".format(optimizer))
optimizer = "sgd"
model = Sequential()
model.add(
Dense(units=units, input_dim=input_dim,
kernel_initializer=kernel_initializer, activation=activation,
kernel_regularizer=kernel_regularizer))
for layer_count in range(n_layers - 1):
model.add(
Dense(units=units, kernel_initializer=kernel_initializer, activation=activation,
kernel_regularizer=kernel_regularizer))
model.add(Dense(units=output_dim,
kernel_initializer=kernel_initializer, activation=activation,
kernel_regularizer=kernel_regularizer))
# Compile model
model.compile(loss=loss, optimizer=optimizer, metrics=['accuracy'])
return model
class MLRegression(MLAlgorithms):
"""
Main class for regression machine learning algorithms.
"""
...
关于python - sklearn 和 n_jobs 中的超参数优化 > 1 : Pickling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42843465/
当我在cross_val_score()中使用参数n_jobs时。 当我的数据规模较小时,它效果很好,但当我扩大数据规模时,多处理似乎不起作用。 怎么会这样? 附注:我使用 IPython 最佳答案
我正在运行一个代码来进行二进制分类并在之后预测标签。该代码与一个大小为 257673 行和 47 列的特定数据库完美运行。当我尝试使用 91690 行和 10 列之一(当然更小)时,我收到错误调用:
当我将 n_jobs 变量传递给 sklearn 中的 LinearRegression 时,我收到一个错误。 根据documentation它应该支持 n_jobs 变量。 我做错了吗? >>> s
这不是一个真正的问题,但我想了解: 在 Win7 4 核 8 GB 系统上从 Anaconda distrib 运行 sklearn 在 200.000 个样本*200 个值表上拟合 KMeans 模
我经常用 GridSearchCV 用于超参数调整。例如,用于调整正则化参数 C在 Logistic Regression .每当我使用的估算器有自己的 n_jobs参数我很困惑在哪里设置它,在估计器
我开发了一个 Python 脚本,它基本上读取 excel 文件并使用 sklearns GridSearchCV 训练模型,使用 n_jobs 语句: def create_table():
尝试通过 n_jobs 参数将 gridsearch CV 与多个作业一起使用,我可以使用 htop 看到它们都已启动并运行,但它们都卡在/分配在同一个核心上,每个使用 25%(我使用的是4核机)。我
def test_n_jobs_parallel(): # Test to check the functioning of n_jobs parameter. for kernel in k
我想知道,哪个更好地与 GridSearchCV( ..., n_jobs = ... ) 一起使用来为模型选择最佳参数集, n_jobs = -1 或 n_jobs 较大的数字, 如 n_jobs
有人使用 sklearn 类的“n_jobs”吗?我在 Anaconda 3.4 64 位中使用 sklearn。 Spyder 版本是 2.3.8。将某些 sklearn 类的“n_jobs”参数设
我目前在使用 scikit 学习库中的 GridSearchCV 方法时遇到问题。我已经为此苦苦挣扎了一个星期,而且似乎还无法解决。当调用它来优化 C 参数上的线性 SVM 时,它会一直卡住。奇怪的是
我一直在使用带有 4 个 NVIDIA GPU 的 Keras 框架来训练 NN 模型。 (数据行数:~160,000,列数:5)。现在我想通过使用 GridSearchCV 来优化它的参数。 但是,
感谢Philip Cloud的伟大answer to a previous question ,我深入研究了 scikit 中 pairwise_distances 的源代码。 相关部分是: def
我在 scikit learn 中编写了自定义转换器并构建了管道。现在我正在尝试使用 GridSearchCV 调整此管道。一切工作正常,直到我尝试设置 n_jobs=-1 来加速该过程。 GUI J
我设置了一个简单的实验来检查多核 CPU 在运行 sklearn GridSearchCV 和 KNeighborsClassifier 时的重要性。我得到的结果让我感到惊讶,我想知道我是否误解了多核
我正在尝试使用 GridSearchCV 来评估具有不同参数集的不同模型。逻辑回归和 k-NN 不会导致问题,但当 n_jobs=-1 时,决策树、随机森林和一些其他类型的分类器不起作用。 for c
我正在运行 GridSearchCV,其中基本估计器是 RandomForestRegressor。我发现在估计器和网格搜索之间拆分处理器会更有效,因此在机器的 24 个可用处理器中,我将 n_job
我陷入了“困境”。这是我的代码的结构: 行为类似于抽象类的基类 可以实例化的子类 一种设置参数并使用 n_jobs=-1 调用 RandomizedSearchCV 或 GridSearchCV 的方
我正在尝试使用 sklearn 的逻辑回归训练一个巨大的数据集。我已经设置了参数n_jobs=-1(也尝试过n_jobs = 5, 10, ...),但是当我打开htop时,我可以看到它仍然只使用一个
在 sklearn.model_selection.cross_val_score 中使用 n_jobs = -1 作为参数时出现错误。我是深度学习和 ANN 的初学者,根据 this 中的讲师在 k
我是一名优秀的程序员,十分优秀!