将input_dim传递给KerasClassifier(sklearn包装器/接口)

Max*_*wer 3 python scikit-learn keras

我最初尝试使用相同的方法,并遇到与此SO发问者相同的错误。但是,使用公认的(唯一的)答案却给了我另一个错误:“ input_dim不是合法参数。”

然后,我尝试对原始问题使用解决方案(“将input_dim keyarg添加到KerasClassifier构造函数”),并再次遇到相同的错误。我是在做错什么,还是现在有一种新方法可以通过sklearn包装器KerasClassifier传递第一层的input_dim?

下面的最小代码示例:

from keras.models import Sequential
from keras.layers import Dense
from sklearn import datasets
from keras.wrappers.scikit_learn import KerasClassifier
import numpy as np


def create_model():
    # create model
    model = Sequential()
    model.add(Dense(12, input_dim=4, init='uniform', activation='relu'))
    model.add(Dense(6, init='uniform', activation='relu'))
    model.add(Dense(1, init='uniform', activation='sigmoid'))

    # Compile model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

    return model

#Error thrown here:
model = KerasClassifier(build_fn=create_model, input_dim=5, nb_epoch=150, batch_size=10, verbose=0)
Run Code Online (Sandbox Code Playgroud)

ValueError:input_dim不是合法参数

ind*_*you 5

您需要将input_dim作为参数之一传递给create_model()

def create_model(input_dim):
    # create model
    model = Sequential()
    # model.add(Dense(12, input_dim=4, init='uniform', activation='relu'))
    model.add(Dense(12, input_dim=input_dim, init='uniform', activation='relu'))
Run Code Online (Sandbox Code Playgroud)

尽管您不必为了消除错误而使用input_diminside create_model