有效ml开发的模块化模型

modmod的Python项目详细描述


modmod

mod mod是用于生成mod-ularmod-els的库。主要问题是 modmod solves是如何在运行时加载模型而不实例化它们 多次;在这方面,它本质上是一个依赖注入 模型系统。

安装

要使用modmod,只需以通常的方式将其与包管理器一起安装。如果 使用Pipenv可以复制/粘贴:

pipenv install modmod

用法

modmod主要有两部分:模型和池

Pool是模型的容器。可以将Model视为 函数,它是一个Model工厂。

下面是定义最简单的可能模型的示例:

from modmod.model import Model

class AddThings(Model):
    def call(self, x: int, y: int) -> int:
        return x + y

下面是您将如何使用它:

import modmod.pool

pool = modmod.pool.get()

adder = pool.get(AddThings)

z = adder(1, 2)
print(z) # prints 3

也可以使用快捷方式获取模型:

adder = AddThings.get()

但是,这不应该在模型中完成,因为它将使用 默认池,如果有人试图使用 在非默认池中建模。

带初始化的模型

有时需要初始化模型以加载数据或执行其他一次性操作 启动任务。为此,只需重写构造函数和create 方法。下面是一个删除stopwords的示例:

import nltk
from modmod.model import Model

class RemoveStopwords(Model):
  def __init__(self, pool: Pool, config: Dict[str, Any], stopwords: List[str]) -> None:
    super().__init__(pool, config)
    self.stopwords = stopwords

  @classmethod
  def create(cls, pool: Pool, config: Dict[str, Any]) -> 'RemoveStopwords':
    nltk.download('stopwords')
    stopwords = nltk.corpus.stopwords.words('english')
    stopwords.append('')
    stopwords.remove('not')
    stopwords.remove('no')
    return RemoveStopwords(pool, config, stopwords)

  def call(self, words: List[str]) -> List[str]:
    return list(filter(lambda w: w not in self.stopwords, words))

当您调用create时,将调用RemoveStopwords.get()方法。它是 只在获得模型时首先调用;之后,创建的模型 位于池中,不会重新初始化

为什么__init__create都是必需的?这是个好问题。 原因归结于可配置性和在测试环境中的使用。 在上面的例子中,如果你想尝试一个新的列表 stopwords,您可以使用构造函数创建一个具有该列表的模型 然后将其添加到池中:

pool = modmod.pool.get('stopwords-experiment')
config = {}

remove_new_stopwords = RemoveStopwords(pool, config, ['stop', 'word', 'list'])
pool.add_model(remove_new_stopwords, RemoveStopwords)

一旦添加到池中,任何调用 RemoveStopwords.get('stopwords-experiment')将找到并检索 手动创建的模型。

注意:create如果你要做一个大手术,通常会被覆盖, 比如下载文件或者读取一些数据。如果你只是在用游泳池 而config对象,完全可以重写__init__和 保留create的默认行为。

配置池

每个模型都将配置传递给它们,而这来自池。 所以,如果需要配置,就需要配置池

注意:在获得任何模型之前,必须配置池,因为 配置它覆盖现有池。

要配置默认池:

import modmod.pool

config = {'opt1': 2}

modmod.pool.configure(config)

非默认池

有时,您需要单独的池来执行单独的任务。一个例子 用于单元测试:您可能希望使用 模型。为此,可以使用单独的池

第一步是配置池:

import modmod.pool

poolname = 'my-pool'
config = {'opt1': 2}

modmod.pool.configure(config, poolname)

第二步就是使用游泳池!

import modmod.pool

pool = modmod.pool.get('my-pool')

adder = pool.get(AddThings)
# Equivalent:
adder = AddThings.get('my-pool')

路线图

我们在路线图上有一些计划。每一个都将是一个版本凹凸:

  • []添加对数据和模型版本控制的支持,添加对模型培训的支持
  • []添加用于分析、调试、缓存的挂钩

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
字符串Java字母替换无效   java Spring Roo JPA MS SQL Server无法打开JPA EntityManager组织。冬眠例外GenericJDBCException:无法打开连接   在scala中使用JavaWS对大型数据文件进行java流式处理   Java编译器是否将字节和短字符识别为文本?   java无法查找符号错误,空指针   mongodb在Java中重用数据库连接   java将多个StringArray从字符串文件获取到活动中   java是一个变量,它只保存最后一次鼠标单击的坐标   c#尺寸有限;添加、删除和洗牌   java如何在Android中显示来自资产文件夹的文本文件中的文本   Android应用程序中的java Tensorflow Lite自定义对象检测模型错误   java如何在foreachloop中使用scanner将来自命令行的输入存储到数组中   java如何定义一个好的存储库接口   Android中的java解析动态json对象