我试图调整我的模型,但我得到这个值错误。我试图改变激活函数,但是当我这样做的时候,学习率返回了同样的错误。我不确定我是否错过了什么。
>ValueError Traceback (most recent call last)
> <ipython-input-46-5d07e2ad456a> in <module>
> 9 param_distributions = params,
> 10 cv = KFold(10))
> --->11 random_search_results = random_search.fit(X_train, y_train)
ValueError: activation is not a legal parameter
def create_model(learning_rate=0.01):
opt = 'Adam'
Tuning_model = Sequential()
Tuning_model.add(Dense(16, input_shape=(X_train.shape[1],)))
Tuning_model.add(Dropout(.2))
Tuning_model.add(BatchNormalization())
Tuning_model.add(Activation('relu'))
Tuning_model.add(Dense(32))
Tuning_model.add(Dropout(.2))
Tuning_model.add(Dense(1))
Tuning_model.compile(loss='mse', optimizer=opt, metrics='mse')
return Tuning_model
# Define the hyperparameter space
params = {'activation': ["relu", "tanh"],
'batch_size': [16, 32, 64, 128],
'epochs': [50, 100],
'optimizer': ["Adam", "SGD", "RMSprop"],
'learning_rate': [0.01, 0.001, 0.0001]}
# Create a randomize search cv object
random_search = RandomizedSearchCV(Tuning_model,
param_distributions = params,
cv = KFold(10))
random_search_results = random_search.fit(X_train, y_train)
ValueError会被抛出,因为activation
不是整个模型的参数,而是它的某一层的参数。因此,当RandomizedSearchCV
试图通过它时,Model
对象不能接受它。
我建议两个解决方案:
- 在构建函数周围使用
KerasClassifier
包装器,并使激活成为其之一。然后使用RandomizedSearchCV优化其性能。
- 使用专用的优化包,如
optuna
-它工作更智能,具有更大程度的自定义。试试吧——他们的网站上有很好很简单的文档。
旁注:RandomizedSearchCV与10倍是多余的,如果样本足够大,使其2倍甚至单倍。