使用KerasRegressor指定输入参数

时间:2017-12-22 16:18:31

标签: initialization keras

我使用Keras神经网络,我希望自动设置输入维度,而不是像我到目前为止看到的每个教程中那样硬编码。我怎么能做到这一点?

我的代码:

sys.path.append(app_root)

我得到的错误:

  

追踪(最近一次呼叫最后一次):

     

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

     

TypeError:调用()缺少1个必需的位置参数:'输入'

2 个答案:

答案 0 :(得分:4)

我会将您的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

然后将KerasRegressor定义并适合:

estimator = KerasRegressor(build_fn=baseline_model(inpt), epochs=2, batch_size=1000, verbose=2)
estimator.fit(X, Y)

这使您可以避免在baseline_model中对输入维度进行硬编码。

答案 1 :(得分:0)

我尝试并工作

def create_model(max_features, num_class):
    def bm():
        model = Sequential()
        model.add(Dense(512, input_shape=(max_features,)))
        model.add(Activation('relu'))
        model.add(Dropout(0.3))
        model.add(Dense(512))
        model.add(Activation('relu'))
        model.add(Dropout(0.3))
        model.add(Dense(num_class, activation='softmax'))
        model.summary()
        model.compile(
            loss='categorical_crossentropy', optimizer='adam',metrics['accuracy'])
        return model
    return bm

然后

model_clf = KerasClassifier(
    build_fn=create_model(max_features, num_class), epochs=10, 
    batch_size=32, verbose=2)
history = model_clf.fit(
                X_train, y_train,
                batch_size=32,
                epochs=10,
                verbose=2,
                validation_data=(X_test, y_test))