系列文章往期回顾
睿智的keras深度学习(零)——keras使用时可能遇到的参数及含义
睿智的keras深度学习(一)——阈值逻辑单元和多层感知机
睿智的keras深度学习(二)——函数式API构建顺序模型快速上手
睿智的keras深度学习(三)——迅速了解回调函数
睿智的keras深度学习(四)——TensorBoard进行快速、精美的可视化
自动化调整超参数
建立模型
def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):
model = Sequential()
model.add(InputLayer(input_shape=input_shape))
for layer in range(n_hidden):
model.add(Dense(n_neurons, activation="relu"))
model.add(Dense(1))
optimizer = SGD(lr=learning_rate)
model.compile(loss='mse', optimizer=optimizer)
return model
这里是用函数构建模型
构建并测试keras回归器
使用keras.wrappers.scikit_learn.KerasRegressor构建的回归器可以使得我们可以像使用sklearn一样使用keras的模型
keras_reg = keras.wrappers.scikit_learn.KerasRegressor(build_model)
keras_reg.fit(X_train, y_train, epochs=100, validation_data=(X_valid, y_valid), callbacks=[keras.callbacks.EarlyStopping(patience=10)])
mse_test = keras_reg.score(X_test, y_test)
mse_test
y_pred = keras_reg.predict(X_new)
y_pred
网格查找合适的超参数
from scipy.stats import reciprocal
from sklearn.model_selection import RandomizedSearchCV
param_distribs = {
"n_hidden":[0, 1, 2, 3],
"n_neurons":np.arange(1, 100),
"learning_rate":reciprocal(3e-4, 3e-2)
}
rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3)
rnd_search_cv.fit(X_train, y_train,
epochs=100,
validation_data=(X_valid, y_valid),
callbacks=[keras.callbacks.EarlyStopping(patience=10)])
rnd_search_cv.best_params_
rnd_search_cv.best_score_