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

Python 如何将原始代码转换为函数示例,python,function,machine-learning,deep-learning,coding-style,Python,Function,Machine Learning,Deep Learning,Coding Style,我刚刚开始学习如何用Python编写代码,如果有人能给我一个关于如何将原始代码转换为函数的简短解释/提示,我将不胜感激 机器学习代码示例: # 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))

我刚刚开始学习如何用Python编写代码,如果有人能给我一个关于如何将原始代码转换为函数的简短解释/提示,我将不胜感激

机器学习代码示例:

# 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']) 
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
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))
如果我想在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()传递到create_model等…)

如果我创建另一个如下所示的函数是否正确:

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)
我得到错误name错误:未定义名称“model”


有人能帮忙吗?

好吧,没有一种方法可以做到这一点,但我将尝试说明一些基本原则,以便为您的代码排序

函数是一组有组织的、可重用的代码,用于执行单个相关操作。函数为应用程序提供了更好的模块化和高度的代码重用

因此,您需要遵循一些“规则”:

  • 尝试将代码分成相关的块,例如:在允许函数接收参数的同时构建NN

  • 确保函数是单一责任(查看
    OOP
    的单一责任,尽管我发现它在创建函数时也非常有用)

现在,我还想提一下,从你的代码中,我可以看出你在处理一个数据问题,例如机器学习问题

我发现这类问题有点不同于传统的软件工程问题,因为很多时候你只做一次事情(甚至可能是硬编码的,比如操纵某些特定的数据帧列,并用一些任意值填充NAN)因此,对于初学者来说,从另一个角度处理函数是很困难的,甚至可能是不必要的,我现在将解释


因此,即使在考虑函数之前,尝试使用某种jupyter笔记本并将代码分成块,这将为您提供一些关于如何划分代码的基本知识,并且不会像我上面提到的那样困难。

您的函数定义有一个问题,我相信:

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)

为函数创建的模型使用不同的名称或传递给函数有助于跟踪它们。

感谢您提供的宝贵建议。我现在将从在jupyter中拆分代码开始,并尝试将其重新构建为函数。如果我将发布我的尝试,你能给我一个反馈吗?再次感谢!当然,我很高兴能帮上忙!我很乐意为你的新尝试提供帮助。还有一件事,如果你也能接受我的回答,我将不胜感激,这将对我非常有帮助(:我有一个问题:是否可以将一个函数传递给另一个函数?请参见编辑,谢谢!感谢它工作!!!!非常感谢!我现在将处理滑动窗口并重新制定我的前一篇文章,再次感谢您,期待您的反馈!