我已经构建了我的模型,如果我只调优一个变量,并且不在其他层上重复它,它就可以工作。例如,仅在一个层中调整unit。就像我下面的代码一样,我试图调优多个units,但它不起作用。
def model_builder(hp):
model = keras.Sequential()
# Tune the number of units in the first Dense layer
hp_units_1 = hp.Int('units_1', min_value=32, max_value=512, step=32)
model.add(keras.layers.Dense(
units=hp_units_1,
input_dim=7,
activation='relu'))
hp_units_2 = hp.Int('units_2', min_value=32, max_value=512, step=32)
model.add(keras.layers.Dense(units=hp_units_2 , activation='relu'))
model.add(keras.layers.Dense(4, activation='sigmoid'))
# Tune the learning rate for the optimizer
# Choose an optimal value from 0.01, 0.001, or 0.0001
hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss=keras.losses.MeanSquaredError(),
metrics=['mse'])
return model尽管我使用_1 so不重复键,但它抛出了一个错误。
Invalid model 0/5
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/kerastuner/engine/hypermodel.py", line 104, in build
model = self.hypermodel.build(hp)
File "<ipython-input-19-f964baafcc40>", line 5, in model_builder
hp_units = hp.Int('units_1', min_value=32, max_value=512, step=32)
File "/usr/local/lib/python3.7/dist-packages/kerastuner/engine/hyperparameters.py", line 744, in Int
return self._retrieve(hp)
File "/usr/local/lib/python3.7/dist-packages/kerastuner/engine/hyperparameters.py", line 625, in _retrieve
return self.values[hp.name]
KeyError: 'units_1'发布于 2021-04-22 19:11:53
最后,可能由于Colab保存运行时的方式,它在某种程度上使用了带有新关键字的旧关键字(虽然听起来很奇怪)。
因此,为了解决这个问题,我不得不在我的调谐器中添加参数overwrite=True:
tuner = kt.Hyperband(model_builder,
objective='val_loss',
max_epochs=10,
factor=3,
overwrite=True)发布于 2021-04-22 09:23:28
错误可能是由于在构建模型时定义的变量造成的。您可能可以在开始构建模型之前定义变量,如下所示并检查结果:
def model_builder(hp):
hp_units_1 = hp.Int('units_1', min_value=32, max_value=512, step=32)
hp_units_2 = hp.Int('units_2', min_value=32, max_value=512, step=32)
# Tune the learning rate for the optimizer
# Choose an optimal value from 0.01, 0.001, or 0.0001
hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
model = keras.Sequential()
model.add(keras.layers.Dense(units=hp_units_1, input_dim=7, activation='relu'))
model.add(keras.layers.Dense(units=hp_units_2 , activation='relu'))
model.add(keras.layers.Dense(4, activation='sigmoid'))
model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss=keras.losses.MeanSquaredError(),
metrics=['mse'])
return modelhttps://stackoverflow.com/questions/67203504
复制相似问题