使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras
Posted
技术标签:
【中文标题】使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras【英文标题】:Porting sklearn MLPClassifier to Keras with L2 regularization 【发布时间】:2019-12-06 03:28:53 【问题描述】:我想将以下 sklearn 模型移植到 keras:
model = MLPClassifier(activation='tanh', hidden_layer_sizes=(60,50), alpha=0.001, random_state=42)
到目前为止,我所拥有的是:
from keras.models import Sequential
from keras.layers import Dense
from keras import regularizers
from tensorflow import set_random_seed
set_random_seed(42)
model = Sequential([
Dense(60, activation='tanh'),
Dense(50, activation='tanh'),
Dense(1, kernel_initializer='normal', activation='sigmoid')
])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', 'binary_accuracy'])
model.fit(
x_train,
y_train,
epochs=200,
batch_size=200,
validation_data=(x_test, y_test)
)
但现在我正在为正则化术语而苦苦挣扎。 sklearn 文档对此并没有太多的表现力:
alpha : 浮点数,可选,默认 0.0001 L2 惩罚(正则化项)参数。
但在 keras 中,密集层有 3 个用于正则化的属性。
kernel_regularizer:应用于核权重矩阵的正则化函数(参见正则化)。 bias_regularizer:应用于偏置向量的正则化函数(参见正则化函数)。 activity_regularizer:应用于层输出的正则化函数(它的“激活”)。
哪一个实际上相当于sklearn正则化?
【问题讨论】:
【参考方案1】:根据sklearn doc,alpha参数用于正则化权重
https://scikit-learn.org/stable/modules/neural_networks_supervised.html
MLPRegressor 和 MLPClassifier 都使用参数 alpha 正则化(L2 正则化)术语,有助于避免 通过惩罚大量权重来过度拟合。
Keras 允许您为权重、偏差和激活值指定不同的正则化。显然,您可以对所有三个使用相同的正则化器。
正则化也适用于每层,例如:
from keras import regularizers.l2
reg1 = l2(0.0001)
reg2 = l2(0.001)
model = Sequential([
Dense(60, activation='tanh', kernel_regularizer=reg1, bias_regularizer=reg1, activity_regularizer=reg1),
Dense(50, activation='tanh', kernel_regularizer=reg2, bias_regularizer=reg2, activity_regularizer=reg2),
...
【讨论】:
which helps in avoiding overfitting by penalizing weights
所以基本上你是说我需要使用偏差+内核正则化但没有活动正则化
不,这只是 sklearn 文档的摘录 :) 正则化激活很重要,这里有一篇关于该主题的好帖子:machinelearningmastery.com/…
但问题不在于如何使用正则化,而是如何在 keras 中实现与 sklearn 在 MLPClassifier 中完全相同的正则化行为。只需快速扫描您的链接部分“MLP Activity Regularization”,因此它实际上只是 activity_regularizer
查看 sklearn 代码,似乎正则化应用于权重:github.com/scikit-learn/scikit-learn/blob/master/sklearn/…以上是关于使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras的主要内容,如果未能解决你的问题,请参考以下文章