如何使用Keras Tuner调整优化功能



如何使用Keras Tuner调整优化功能?我想试试SGD、Adam和RMSprop。

我试过了:

hp_lr = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
hp_optimizer = hp.Choice('optimizer', values=[SGD(learning_rate=hp_lr), RMSprop(learning_rate=hp_lr), Adam(learning_rate=hp_lr)])
model.compile(optimizer=hp_optimizer,
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])

但这并不能作为";CCD_ 1只能包含一种类型的值"0";

也许最好的方法是这样做:

hp_optimizer = hp.Choice('optimizer', values=['sgd', 'rmsprop', 'adam'])
if hp_optimizer == 'sgd':
optimizer = SGD(learning_rate=hp_lr)
elif hp_optimizer == 'rmsprop':
optimizer = RMSprop(learning_rate=hp_lr)
elif hp_optimzier == 'adam':
optimizer = Adam(learning_rate=hp_lr)
else:
raise
model.compile(optimizer=optimizer,
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])

显然,您想要一个更具描述性的异常(或者干脆放弃它,因为它无论如何都不应该发生(。即使不同的优化器属于同一类,IIRChp.Choice也只允许int、float、bool和string,所以我看不出有什么办法可以这样做。

这个问题早就得到了回答,但也许有人需要一个在我的环境中有效的替代解决方案。:

hp_learning_rate = hp.Choice('learning_rate', 
values=[1e-2, 1e-3, 1e-4]
)
optimizers_dict = {
"Adam":    Adam(learning_rate=hp_learning_rate),
"SGD":     SGD(learning_rate=hp_learning_rate),
"Adagrad": Adagrad(learning_rate=hp_learning_rate)
}
hp_optimizers = hp.Choice(
'optimizer', 
values=["Adam", "SGD", "Adagrad"]
)
model.compile(
loss='binary_crossentropy',
optimizer=optimizers_dict[hp_optimizers],
metrics=[
AUC(curve="ROC", name="roc"),
AUC(curve="PR", name="pr"),
Precision(name='precision'),
f1_score
]
)

最新更新