【问题标题】:How to convert raw code into function(s) example如何将原始代码转换为函数示例
【发布时间】:2020-07-27 16:25:12
【问题描述】:

我刚刚开始学习如何用 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 个函数中创建这个示例,我应该如何开始?

编辑:

在上面的代码中,我为创建了一个函数:

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 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

有人可以帮忙吗?

【问题讨论】:

    标签: python function machine-learning deep-learning coding-style


    【解决方案1】:

    我认为你的函数 def 有问题:

    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)
    

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

    【讨论】:

    • 感谢它的工作!!!!欢呼超级赞赏!我现在将在滑动窗口上工作并重新制定我的先前帖子,再次感谢您并期待您的反馈!
    【解决方案2】:

    好吧,没有一种方法可以解决这个问题,但我会尝试说明一些用于订购您的代码的基线。

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

    话虽如此,你需要遵守一些“规则”:

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

    我发现这类问题与传统的软件工程问题有点不同,因为很多时候你一次做某事(甚至可以硬编码,比如操作一些特定的数据帧列并用一些任意值填充 nans)所以对于初学者来说,将其分解为函数有点困难,甚至可能没有必要,但我现在将从另一个角度来解决它。

    因此,即使在考虑函数之前,请尝试使用某种 jupyter-notebook 并将代码在那里拆分成块,这将为您提供有关如何划分代码的一些精髓,并且不会像我上面提到的那样难。

    【讨论】:

    • 感谢您的宝贵建议。我现在将从在 jupyter 中拆分代码开始,并尝试将其重新构建为函数。如果我随后会发布我的尝试,请您给我一个反馈吗?再次感谢!
    • 当然,我很高兴能帮上忙!我很乐意帮助你进行新的尝试。在另一件事上-如果您也能接受我的回答,我将不胜感激,这对我很有帮助(:
    • 我有一个问题:是否可以将一个函数传递给另一个函数?请参阅编辑,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多