使用KerasRegressor指定输入参数

Mar*_*c S 3 initialization keras

我使用Keras神经网络,并且希望自动设置输入维度,而不是像到目前为止所看到的每篇教程一样进行硬编码。我该怎么做?

我的代码:

from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
seed = 1

X = df_input
Y = df_res

def baseline_model(x):
    # create model
    model = Sequential()    
    model.add(Dense(20, input_dim=x, kernel_initializer='normal', activation=relu))
    model.add(Dense(1, kernel_initializer='normal'))
    # Compile model
    model.compile(loss='mean_absolute_error', optimizer='adam')
    return model

inpt  = len(X.columns)
estimator = KerasRegressor(build_fn = baseline_model(inpt  ) , epochs=2, batch_size=1000, verbose=2)
estimator.fit(X,Y)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

追溯(最近一次通话):

在estimator.fit(X,Y)中的文件ipython-input-2-49d765e85d15,第20行

TypeError:call()缺少1个必需的位置参数:'inputs'

rvi*_*nas 6

我将包裹您baseline_model如下:

def baseline_model(x):
    def bm():
        # create model
        model = Sequential()
        model.add(Dense(20, input_dim=x, kernel_initializer='normal', activation='relu'))
        model.add(Dense(1, kernel_initializer='normal'))
        # Compile model
        model.compile(loss='mean_absolute_error', optimizer='adam')
        return model
    return bm
Run Code Online (Sandbox Code Playgroud)

然后定义并拟合KerasRegressor为:

estimator = KerasRegressor(build_fn=baseline_model(inpt), epochs=2, batch_size=1000, verbose=2)
estimator.fit(X, Y)
Run Code Online (Sandbox Code Playgroud)

这避免了必须对中的输入维进行硬编码baseline_model