微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pyro 标准化流中使用的网络架构

如何解决Pyro 标准化流中使用的网络架构

我正在阅读有关规范化流程的 Pyro 教程 (https://pyro.ai/examples/normalizing_flows_i.html),我想更好地了解这些示例是如何在幕后工作的。 例如,我指的是用于获取同心圆示例的边缘分布的网络架构。 在示例中,基本分布(在潜在空间中)是正态分布,流是有理样条:

base_dist = dist.normal(torch.zeros(2),torch.ones(2))
spline_transform = T.Spline(2,count_bins=16)
flow_dist = dist.Transformeddistribution(base_dist,[spline_transform])

根据教程,(样条的)节点及其导数是可以学习的参数,例如,通过最大似然目标的随机梯度下降。作者继续展示如何做到这一点:

%%time
steps = 1 if smoke_test else 1001
dataset = torch.tensor(X,dtype=torch.float)
optimizer = torch.optim.Adam(spline_transform.parameters(),lr=1e-2)
for step in range(steps):
    optimizer.zero_grad()
    loss = -flow_dist.log_prob(dataset).mean()
    loss.backward()
    optimizer.step()
    flow_dist.clear_cache()

    if step % 200 == 0:
        print('step: {},loss: {}'.format(step,loss.item()))

最后,作者指出如何从学习到的分布中采样以获得新样本:

X_flow = flow_dist.sample(torch.Size([1000,])).detach().numpy()

我想知道用于学习这些参数的神经网络的架构是什么,是否有(可能很简单的)方法修改这个架构。

更一般地说,我想将这些简单的例子应用于学习时间序列数据密度的单变量情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。