2016-11-03 11 views
10

मैं निम्नलिखित कोड, Keras Scikit-Learn Wrapper का उपयोग, जो अच्छा काम किया है:कैसे एक पैरामीटर पारित करने के लिए Scikit-जानें Keras मॉडल समारोह

from keras.models import Sequential 
from keras.layers import Dense 
from sklearn import datasets 
from keras.wrappers.scikit_learn import KerasClassifier 
from sklearn.model_selection import StratifiedKFold 
from sklearn.model_selection import cross_val_score 
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 


def main(): 
    """ 
    Description of main 
    """ 


    iris = datasets.load_iris() 
    X, y = iris.data, iris.target 

    NOF_ROW, NOF_COL = X.shape 

    # evaluate using 10-fold cross validation 
    seed = 7 
    np.random.seed(seed) 
    model = KerasClassifier(build_fn=create_model, nb_epoch=150, batch_size=10, verbose=0) 
    kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed) 
    results = cross_val_score(model, X, y, cv=kfold) 

    print(results.mean()) 
    # 0.666666666667 


if __name__ == '__main__': 
    main() 

pima-indians-diabetes.data डाउनलोड किया जा सकता here

def create_model(input_dim=None): 
    # create model 
    model = Sequential() 
    model.add(Dense(12, input_dim=input_dim, 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 

लेकिन यह:

अब मुझे क्या करना चाहते हैं एक मूल्य NOF_COLcreate_model() समारोह के एक पैरामीटर में create_model() समारोह है कि इस तरह दिखता है के साथ नीचे दिए तरीक़े

model = KerasClassifier(build_fn=create_model(input_dim=NOF_COL), nb_epoch=150, batch_size=10, verbose=0) 

पारित करने के लिए है इस त्रुटि को देने में विफल रहता है:

TypeError: __call__() takes at least 2 arguments (1 given) 

ऐसा करने का सही तरीका क्या है?

उत्तर

8

आप KerasClassifier निर्माता के लिए एक input_dim keyarg जोड़ सकते हैं:

model = KerasClassifier(build_fn=create_model, input_dim=5, nb_epoch=150, batch_size=10, verbose=0) 
संबंधित मुद्दे