如何将原始代码转换为函数示例

我刚开始学习Python编程,如果有人能简要解释/提示一下如何将原始代码转换为函数,我将不胜感激。

示例机器学习代码:

# create modelmodel = Sequential()model.add(Dense(neurons, input_dim=8, kernel_initializer='uniform', activation='linear', kernel_constraint=maxnorm(4)))model.add(Dropout(0.2))model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))# Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # split into input (X) and output (Y) variablesX = dataset[:,0:8]Y = dataset[:,8]# create modelmodel = KerasClassifier(build_fn=model, epochs=100, batch_size=10, verbose=0)# define the grid search parametersneurons = [1, 5]param_grid = dict(neurons=neurons)grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)grid_result = grid.fit(X, Y)# summarize resultsprint("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))means = grid_result.cv_results_['mean_test_score']stds = grid_result.cv_results_['std_test_score']params = grid_result.cv_results_['params']for mean, stdev, param in zip(means, stds, params):    print("%f (%f) with: %r" % (mean, stdev, param))

如果我想将这个示例转换成1到2个函数,我应该如何开始?

编辑:

在上面的代码中,我已经为< # create model > 创建了一个函数:

def create_model(neurons=1):    # create model    model = Sequential()    model.add(Dense(neurons, input_dim=8, kernel_initializer='uniform', activation='linear', kernel_constraint=maxnorm(4)))    model.add(Dropout(0.2))    model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))    # Compile model    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])return model

然后,我需要将 create_model() 传递给 < KerasClassifier(build_fn=create_model etc…) >

如果我像下面这样创建另一个函数,是否正确:

def keras_classifier(model):    # split into input (X) and output (Y) variables    X = dataset[:,0:8]    Y = dataset[:,8]    model = KerasClassifier(build_fn=model, epochs=100, batch_size=10, verbose=0)    # define the grid search parameters    neurons = [1, 5]    param_grid = dict(neurons=neurons)    grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)    grid_result = grid.fit(X, Y)    # summarize results    print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))    means = grid_result.cv_results_['mean_test_score']    stds = grid_result.cv_results_['std_test_score']    params = grid_result.cv_results_['params']    for mean, stdev, param in zip(means, stds, params):         print("%f (%f) with: %r" % (mean, stdev, param))

这样做是否正确/可以作为另一个函数中调用的函数?

因为如果我调用这两个函数:

create_model(neurons)keras_classifier(model)

我会得到错误 NameError: name ‘model’ is not defined

请问有人能帮我吗?


回答:

我认为你的函数定义存在问题:

def create_model(neurons):    ....return model

需要改成

def create_model(neurons):    ....    return model

在Python中,缩进非常重要,它们是语法的一部分。请不要编写难看的代码,谢谢 🙂

是的,你可以将模型传递给一个函数,然后该函数将其传递给keras分类器的build_fn=命名变量。你传递给分类器调用的东西本身必须是一个模型对象,所以这样做:

model = KerasClassifier(build_fn=create_model(), epochs=100, batch_size=10, verbose=0)

为你的函数创建的模型使用不同的名称,或者在传递给函数时使用不同的名称,可以帮助你跟踪它们。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注