深层生成模型库

pixyz的Python项目详细描述


pixyz:用于开发深层生成模型的库

pypilicense:mitpython versionpytorch version阅读文档travisci

文档示例pixyzoo

什么是pixyz?

pixyz是一个高级深层生成建模库,基于pytorch。它的开发重点是使各种深层生成模型易于实现。

最近,许多关于深层生成模型的论文被发表。然而,对于专家和实践者来说,它的再现成为一项艰巨的任务,因为最近的这些模型变得更加复杂,并且没有统一的工具来连接它们的数学公式和实现。我们图书馆的愿景是让专家和实践者都能通过实现这种复杂的深层生成模型,就像编写这些论文中提供的公式一样

我们的库支持以下深度生成模型。

  • 显式模型(基于似然)
    • 变分自动编码器(变分推理)
    • 基于流的模型
    • 自回归生成模型(注:尚未实现)
  • 隐式模型
    • 生成性对抗网络

此外,pixyz使您能够在同一个框架中实现这些不同的模型,并将它们结合在一起。NG>

pixyz的概述如下。下面将讨论每个api。

注意:由于此库正在开发中,因此可能存在一些错误。

安装

pixyz可以通过使用pip

$ pip install pixyz

如果从源代码安装,请执行以下命令。

$ git clone https://github.com/masa-su/pixyz.git
$ pip install -e pixyz

快速启动

在这里,我们考虑实现一个变分自动编码器(vae),它是最著名的深生成模型之一。vae由一个推理模型组成 生成模型 ,每一个都由dnn定义,这个损失函数(负elbo)如下。

imgsrc="https://warehouse-camo.cmh1.psfhosted.org/B18B593BCBEB2342B2342dA6D54D4885FEEEEEEEE88E278B/6874747470733A322222222F6C617465782E636F6465636F67732E636F6F6D26F676767662E6C66767662E6C66767662E6C667662E6C66767662E6C66767662E6C66767662E6C66767666C667666C66767676767662E6C66767666C66767676767662E6C66767666C66767666C66767676767677B5C74686574617D28787型c7a297d5c72696768745d2b445f7b4c7d5c6c566745b715f7b5c7068697d287a7c78297c7c705f7b7072696f727d287a295c72696768745d" />(1)

在pixyz中,深度生成模型通过以下三个步骤实现:

  1. 定义分发(分发api)
  2. 设置模型的损失函数(损失api)
  3. 培训模型(模型api)
  4. < > > <H3>1。定义分发(分发API)

    首先,我们需要定义两个分布( )和dnns。在pixyz中,可以像在pytorch中一样通过构建dnn模块来实现这一点。主要的区别在于,您应该继承pixyz.distributions.*类(distribution api),而不是torch.nn.module

    例如, (伯努利) 和 (正常)执行如下。

    >>>frompixyz.distributionsimportBernoulli,Normal>>># inference model (encoder) q(z|x)>>>classInference(Normal):...def__init__(self):...super(Inference,self).__init__(cond_var=["x"],var=["z"],name="q")# var: variables of this distribution, cond_var: coditional variables....self.fc1=nn.Linear(784,512)...self.fc21=nn.Linear(512,64)...self.fc22=nn.Linear(512,64)......defforward(self,x):# the name of this argument should be same as cond_var....h=F.relu(self.fc1(x))...return{"loc":self.fc21(h),..."scale":F.softplus(self.fc22(h))}# return parameters of the normal distribution...>>># generative model (decoder) p(x|z)    >>>classGenerator(Bernoulli):...def__init__(self):...super(Generator,self).__init__(cond_var=["z"],var=["x"],name="p")...self.fc1=nn.Linear(64,512)...self.fc2=nn.Linear(512,128)......defforward(self,z):# the name of this argument should be same as cond_var....h=F.relu(self.fc1(z))...return{"probs":F.sigmoid(self.fc2(h))}# return a parameter of the Bernoulli distribution

    一旦定义,您就可以创建这些类的实例。

    >>>p=Generator()>>>q=Inference()
    < VAE > 在生成模型之前,通常定义为标准正态分布,而不使用dnns。 这样的实例可以从pixyz.distributions.*创建为

    >>>prior=Normal(loc=torch.tensor(0.),scale=torch.tensor(1.),...var=["z"],features_shape=[64],name="p_prior")

    如果你想t要了解每个实例定义了什么样的分布以及定义了什么模块(网络体系结构),只需printthem即可。

    >>>print(p)Distribution:p(x|z)Networkarchitecture:Generator(name=p,distribution_name=Bernoulli,var=['x'],cond_var=['z'],input_var=['z'],features_shape=torch.Size([])(fc1):Linear(in_features=64,out_features=512,bias=True)(fc2):Linear(in_features=512,out_features=512,bias=True)(fc3):Linear(in_features=512,out_features=784,bias=True))

    如果您使用的是ipython环境,则可以使用打印乳胶以乳胶编译格式显示它们。

    下>>>samples_z=prior.sample(batch_n=1)>>>print(samples_z){'z':tensor([[0.6084,1.4716,0.6413,1.3184,-0.8930,0.0603,1.2254,0.5910,...,0.8389]])}>>>samples=p.sample(samples_z)>>>print(samples){'z':tensor([[1.5377,0.4713,0.0354,0.5013,1.2584,0.8908,0.6323,1.0844,...,-0.7603]]),'x':tensor([[0.,1.,0.,1.,0.,0.,1.,1.,0.,0.,1.,1.,1.,1.,...,0.]])}

    在本例中,样本以字典形式表示,其中键对应于随机变量名,值是它们的实现值。

    再者,共同分配的实例 可以通过分发实例的乘积创建

    >>>p_joint=p*prior

    此实例可以检查为

    >>>print(p_joint)Distribution:p(x,z)=p(x|z)p_{prior}(z)Networkarchitecture:Normal(name=p_{prior},distribution_name=Normal,var=['z'],cond_var=[],input_var=[],features_shape=torch.Size([64])(loc):torch.Size([1,64])(scale):torch.Size([1,64]))Generator(name=p,distribution_name=Bernoulli,var=['x'],cond_var=['z'],input_var=['z'],features_shape=torch.Size([])(fc1):Linear(in_features=64,out_features=512,bias=True)(fc2):Linear(in_features=512,out_features=512,bias=True)(fc3):Linear(in_features=512,out_features=784,bias=True))

    万向节 ,分别为。

    更多信息

    pixyz的这些框架允许实现更复杂的深层生成模型。 请参见示例代码pixyzoo存储库。

    有关更详细的用法,请查看pixyz文档。

    如果在使用pixyz时遇到一些问题,请告诉我们。

    致谢

    此库基于新能源和工业技术开发组织(NEdo)委托的一个项目的结果。

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

    推荐PyPI第三方库


热门话题
java Google Billing Library:QueryPurchaseAsync:取消购买的订阅资源未返回   java转换列表mapsturct中的单个对象   java简单算法。我做不好   包含集合的@ManyToMany映射的java JPA2持久性   在Java中序列化和反序列化对象时发生BuffereImage错误   java使用ui:param传递值并在backingbean中访问它们   java从应用程序读取配置。yml至POJO列表地图   java中在while循环外部调用文件值   java如何与来自不同类的UI交互   java如何在jTable中显示2D数组?   在Java 8中,类为什么不从接口继承默认方法?   java类。getAnnotation和getAnnotations无法正常工作   java处理pagertabstrip上的触摸事件   java GWT和struts2异常   用Java解析HTTP查询字符串   java这段代码SQL注入安全吗?