【问题标题】:Custom dependencies in the scikit-learn framework of Google Cloud ML EngineGoogle Cloud ML Engine 的 scikit-learn 框架中的自定义依赖项
【发布时间】:2018-07-31 22:10:34
【问题描述】:

我正在寻找在我的 ML 项目中添加用户定义函数和自定义转换器的可能性,但我只找到了如何在 Tensor-Flow 框架中执行此操作的示例。

我创建了一个可以使用 pip 安装的自定义包,但我不知道 setup.py 文件在 scikit-learn 框架中的外观。

如果你能给我一些提示,我会很高兴。

我尝试部署的管道如下:

from custscaler import StdScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import Pipeline   

knn_pipe = Pipeline([
    ('my_std', StdScaler(5) ),
    ('my_knn',KNeighborsClassifier(n_neighbors=7)) 
    ])

model = knn_pipe.fit(X_train, Y_train)

自定义转换器:
/custscaler/__init__.py

from .fct1 import StdScaler

/custscaler/fct1.py

from sklearn import base


class StdScaler(base.BaseEstimator, base.TransformerMixin):

    def __init__(self, scaling_factor):
        self.scaling_factor = scaling_factor

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        data = [ [el*self.scaling_factor for el in row] for row in X ]
        return data

【问题讨论】:

  • 只是将新的(自定义函数)文件放在与实际代码相同的目录或模块中不起作用吗?
  • (旁注:您可以使用 sklearn.preprocessing.FunctionTransformer 而不是从 TransformerMixin 派生)

标签: scikit-learn google-cloud-ml


【解决方案1】:

无论框架如何,打包依赖项实际上都是一样的。尽管setup.py 是一个通用结构,但在 CloudML Engine 的页面 (link) 上给出了一些建议

这个图应该特别有用:

在您的情况下,执行 knn_pipe.fit 的代码 sn-p 将位于 trainer 内部,而 custscaler 将是图中的“other_subpackage”。

setup.py 中的“神奇位”是一行:

packages=find_packages()

这将包括trainercustscaler(假设它们有__init__.py)。

【讨论】:

  • 此项目结构解决了训练作业的自定义转换器问题,但由于缺少“other_subpackage”,部署模型版本仍然会失败。
  • @pipo 我们有相同的功能可用于早期测试中的模型部署。如果您有兴趣,请联系 cloudml-feedback@google.com。
猜你喜欢
  • 1970-01-01
  • 2019-02-08
  • 2018-12-31
  • 2018-12-23
  • 1970-01-01
  • 2019-01-12
  • 2017-12-19
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多