1
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 不更新目标?

4

0 回答 0