python - Keras Tuner:“最优”模型过拟合,搜索停止在极端超参数值处
问题描述
我正在使用 Keras Tuner 为我的神经网络找到最佳超参数。我正在处理一个非常小的样本(227 个训练样本和 57 个验证样本)。
#3.4: Feed-forward neural network
params = ['batch_size', 'epochs', 'drop_rate', 'learning_rate', 'num_layers','units_1','units_2','units_3','units_4']
params_nn = pd.DataFrame(np.zeros((len(params), len(commodities))), index = params, columns = commodities)
for l in range(len(commodities)):
def build_model(hp):
drop_rate = hp.Choice('drop_rate', values = [0.0, 0.2, 0.4])
model_full = keras.Sequential()
for i in range(hp.Int('num_layers', 1, 5)):
model_full.add(keras.layers.Dense(units = hp.Int('units_'+str(i+1),
min_value=3,
max_value=24,
step=3), activation="relu",
input_shape=(1, x_nn_train[0].shape[2])))
model_full.add(keras.layers.Dropout(drop_rate))
model_full.add(keras.layers.Dense(1))
model_full.compile(loss='huber_loss',
optimizer = keras.optimizers.Adam(hp.Choice('learning_rate',
values = [1e-2, 1e-3, 1e-4])))
return model_full
bayesian_opt_tuner = MyTuner(
build_model,
objective = 'val_loss',
max_trials=35,
executions_per_trial=3,
directory=os.path.normpath('C:/keras_tuning'),
project_name='kerastuner_bayesian_poc',
overwrite=True)
bayesian_opt_tuner.search(x_nn_train[l], y_nn_train[l],
validation_data=(x_nn_validation[l], y_nn_validation[l]), verbose=1)
best_params = bayesian_opt_tuner.get_best_hyperparameters(1)[0]
for k in range(len(params)):
try:
params_nn.iloc[k,l] = best_params.get(params[k])
except ValueError:
params_nn.iloc[k,l] = "-"
鉴于样本量较小,我预计最佳层数在 1 到 3 之间;然而,调谐器会立即选择极端的超参数值(比如五层,每层有 24 个神经元)。因此,模型预测都是相同的并且接近于零。
- 无论模拟次数如何,我都会得到相同的结果
- 我尝试将特征数量减少到 5 个主成分,结果是一样的
- 我正在预测回报,并使用 MinMaxScaler 对特征进行了缩放。
我设置优化的方式有问题吗?谢谢你。
解决方案
推荐阅读
- spring - 如何在我的域上使我的 Spring Boot 应用程序在线?
- java - 我正在 Java 中尝试此代码,但结果输出对我来说并不清楚。有人可以解释以下输出的原因吗
- runtimeexception - 引起:com.google.firebase.database.DatabaseException:
- rxjs - ngrx/rxjs:这个代码可以先检查商店然后改进API请求吗?
- reactjs - 将 TypeScript 与 React HOC、React.lazy 和 forwarRef 一起使用
- python - 如何计算授权码的c_hash?
- python - jupyter notebook,docker image 询问令牌
- sql - 如何将 LAG 函数与 WHERE 子句结合使用?
- amazon-web-services - 有没有办法避免向 AWS S3 发送连续请求?
- deep-learning - 基于 BERT 的 CNN - 卷积和 Maxpooling