【问题标题】:ValueError: activation is not a legal parameterValueError:激活不是合法参数
【发布时间】:2021-05-14 18:58:03
【问题描述】:

我正在尝试调整我的模型,但我收到了这个值错误。我尝试更改激活函数,但是当我这样做时,学习率返回了相同的错误。我不确定我是否遗漏了什么。

>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)

【问题讨论】:

  • 你能贴出导致这个错误的全部代码吗?

标签: python tensorflow keras scikit-learn neural-network


【解决方案1】:

引发 ValueError 是因为 activation 不是整个模型的参数,而是其某些层的参数。所以当RandomizedSearchCV 试图通过它时,Model 对象不能接受它。

我建议2个解决方案:

  1. 在构建函数周围使用KerasClassifierwrapper,并将激活作为其中之一。然后使用 RandomizedSearchCV 优化其性能。
  1. 使用专门的优化包,如optuna - 它工作得更智能并且具有更大程度的定制。试试看 - 他们在 their site 上有很好且简单的文档。

旁注:10 折的 RandomizedSearchCV 是多余的,如果样本足够大,则将其设为 2 甚至单折。

【讨论】:

  • 感谢您的建议。这是一个回归问题,这就是我使用 Keras 回归器的原因。我会尝试 optuna 并减少折叠次数。
【解决方案2】:

我认为您需要在函数中提及优化器作为参数,例如:

def create_model(opt, learning_rate=0.01):
    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

【讨论】:

    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2019-09-10
    • 2020-02-18
    • 2012-02-29
    • 2019-01-31
    • 2019-09-16
    • 2022-01-11
    • 2021-07-09
    相关资源
    最近更新 更多