class regressionHyperModel(HyperModel):
def __init__(self, input_shape):
self.input_shape = input_shape
def build(self, hp):
initializer = hp.Choice(name='kernel', values=['variance_scaling', 'constant',
'glorot_uniform', 'glorot_normal', 'ones',
'zeros', 'he_normal', 'he_uniform', 'random_normal', 'random_uniform'])
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(
input_dim=(self.input_shape),
units=hp.Int(name='units_1', min_value=16, max_value=1000, step=16),
activation =hp.Choice(name='activation_1', values=['relu','tanh','elu','selu','swish']),
kernel_initializer=initializer
))
model.add(tf.keras.layers.Dropout(rate=hp.Float(name='dropout_1', min_value=0, max_value=0.9, step=0.1)))
model.add(tf.keras.layers.Dense(
units=hp.Int(name='units_2', min_value=16, max_value=1000, step=16),
activation = hp.Choice(name='activation_2', values=['relu','tanh','elu','selu','swish']),
kernel_initializer=initializer
))
model.add(tf.keras.layers.Dropout(rate=hp.Float(name='dropout_2', min_value=0, max_value=0.9, step=0.1)))
model.add(tf.keras.layers.Dense(
units=hp.Int(name='units_3', min_value=16, max_value=1000, step=16),
activation = hp.Choice(name='activation_3', values=['relu','tanh','elu','selu','swish']),
kernel_initializer=initializer
))
model.add(tf.keras.layers.Dropout(rate=hp.Float(name='dropout_3', min_value=0, max_value=0.9, step=0.1)))
model.add(tf.keras.layers.Dense(1552, activation='linear'))
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=hp.Choice(name='learning_rate', values=[1e-2, 1e-3, 1e-4, 1e-5, 1e-6])),
loss='mse', metrics=['mse'])
return model
class MyTuner(kt.tuners.Hyperband):
def run_trial(self, trial, *args, **kwargs):
kwargs['batch_size'] = trial.hyperparameters.Int('batch_size', 32, 256, step=32)
kwargs['epochs'] = trial.hyperparameters.Int('epochs', 10, 20000)
super(MyTuner, self).run_trial(trial, *args, **kwargs)
tuner_model = regressionHyperModel(self.state_size)
tuner = MyTuner(hypermodel=tuner_model, objective= 'val_mse' , max_epochs = 100, factor=3,
directory='/content/drive/MyDrive/DataScience/RL tuner/test_dir', project_name='node5', overwrite=False, executions_per_trial=3)
es = tf.keras.callbacks.EarlyStopping(patience=10)
ct = ClearTrainingOutput()
train_size = round(len(states)* 0.8)
train_states = states[:train_size]
test_states = states[train_size:]
train_target = target[:train_size]
test_target = target[train_size:]
tuner.search(train_states, train_target, validation_data=(test_states, test_target), verbose=1, callbacks=[es, ct])
print(tuner.oracle.get_best_trials(num_trials=1)[0].hyperparameters.values)
print(tuner.results_summary(1))
嗨,我正在尝试在 google colab 上使用 keras-tuner 调整我的神经网络。
我的目标是“val_mse”。
似乎我的代码以某种方式工作,但是当调谐器正在搜索参数时,它不会更新最佳目标。
例如,tuner 找到了 'val_mse' 的 99 个,后来它找到了 'val_mse' 的 0.12 个,但它保持 99 作为最好的 'val_mse' 直到搜索结束。
有谁知道为什么 keras-tuner 不更新目标?