'Sequential' 对象没有属性 'loss' - 当我使用 GridSearchCV 来调整我的 Keras 模型时

Tom*_*ung 4 python keras tensorflow

我正在使用tensorflowkeras构建一个简单的 MNIST 分类模型,我想微调我的模型,所以我选择了sklearn.model_selection.GridSearchCV.

但是,当我调用该fit函数时,它说:

AttributeError: 'Sequential' object has no attribute 'loss'

我将我的代码与其他人的代码进行了比较,但仍然无法弄清楚原因。唯一的区别是我使用tensorflow.keras而不是keras.

这是我的代码:

    从 tensorflow.keras.models 导入顺序,模型
    从 tensorflow.keras.layers 导入 Input、Dense、Activation、Dropout、BatchNormalization
    从 tensorflow.keras.datasets 导入 mnist
    从 tensorflow.keras.wrappers.scikit_learn 导入 KerasClassifier
    从 sklearn.model_selection 导入 GridSearchCV

    ...
    ...
    ...


    def get_model(dropout_rate=0.2, hidden_​​units=512):
        模型 = 顺序()
        模型.添加(辍学(辍学率,输入形状=(28 * 28,)))
        model.add(Dense(hidden_​​units, activation='relu'))
        model.add(BatchNormalization())
        模型.添加(辍学(辍学率))
        model.add(Dense(hidden_​​units, activation='relu'))
        model.add(BatchNormalization())
        模型.添加(辍学(辍学率))
        model.add(Dense(hidden_​​units, activation='relu'))
        model.add(BatchNormalization())
        模型.添加(辍学(辍学率))
        模型.添加(密集(10,激活=“softmax”))
        回报模式

    模型 = KerasClassifier(build_fn=get_model,batch_size=128,epochs=10)
    para_dict = {'dropout_rate':[0.2,0.5,0.8],'hidden_​​units':[128,256,512,1024]}
    clf = GridSearchCV(model, para_dict, cv=5, score='accuracy')
    clf.fit(x_train, y_train)

谢谢!

Nih*_*eth 6

build_model上面的函数不会配置你model的训练。您已添加loss和其他参数。

您可以使用 keras 顺序方法编译模型compilehttps://keras.io/models/sequential/

所以你的 build_model 函数应该是:

loss = 'binary_crossentropy' #https://keras.io/optimizers
optimizer = 'adam'           #https://keras.io/losses
metrics = ['accuracy']
def get_model(dropout_rate=0.2, hidden_units=512):
    model = Sequential()
    model.add(Dropout(dropout_rate, input_shape=(28*28,)))
    model.add(Dense(hidden_units, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))
    model.add(Dense(hidden_units, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))
    model.add(Dense(hidden_units, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))
    model.add(Dense(10, activation='softmax'))
    model.compile(optimizer = optimizer, loss = loss, metrics = metrics)
    return model
Run Code Online (Sandbox Code Playgroud)