pyro.optim pyro ppl 概率编程 优化器 pytorch

英文文档在这里

docs.pyro.ai/en/stable/optimization.html

贝叶斯神经网络:一种新视角

对于希望深入了解贝叶斯神经网络的读者,以下是一些推荐的资源:

PyMC3视频教程 space.bilibili.com/259953362/channel/seriesdetail?sid=2637173

银色狮子巴壁虎的个人空间-银色狮子巴壁虎个人主页-哔哩哔哩视频

pypro 镜像

GitCode - 全球开发者的开源社区,开源代码托管平

gitcode.com/gh_mirrors/py/pyro/tree/dev/pyro/contrib/bnn

教程和实例

【注意这里的代码是python2.7 对应的pyro都版本也比较低】

可以在[这个GitHub仓库](https://github.com/Rachnog/Deep-Trading/tree/master/bayesian)找到相关的代码示例和教程。通过这些资源,读者可以更深入地理解贝叶斯方法,并将其应用于自己的项目

其他一些人资源

atomgit.com

AtomGit_开放原子开源基金会代码托管平台-AtomGit

开源项目 - 开放原子开源基金会 www.openatom.cn/projects

使用Pytorch和Pyro实现贝叶斯神经网络(Bayesian Neural Network)_gang_akarui-开放原子开发者工作坊

Pyro简介

镜像GitCode - 全球开发者的开源社区,开源代码托管平台

gitcode.com/gh_mirrors/py/pyro/blob/dev/tutorial/source/bayesian_regression_ii.ipynb

官方英文文档

Introduction to Pyro --- Pyro Tutorials 1.9.1 documentation

pyro.ai/examples/intro_long.html#Example-model:-Maximum-likelihood-linear-regression
Heyang Gong 汉化版本的文档

causalai.github.io/pyro_zh_tutorial/tensor_shapes.html

这个是pyro的官方中文文档

其他相关资料 搜索

复制代码
pyro.sample("obs"   

或者Pyro
pyro英语带中文字幕的介绍,

用Ubers Pyro介绍概率编程_哔哩哔哩_bilibili
其他资料 视频 教程 基于Pyro和Pytorch的概率编程入门01------简单线性回归的实现

银色狮子巴壁虎

基于Pyro和Pytorch的概率编程入门01------简单线性回归的实现_哔哩哔哩_bilibili

基于Pyro和Pytorch的概率编程入门02------pytorch的结构化数据加载与预处理_哔哩哔哩_bilibili

基于Pyro和Pytorch的概率编程入门02------pytorch的结构化数据加载与预处理_哔哩哔哩_bilibili

还有pymc3 视频合集

银色狮子巴壁虎的个人空间-银色狮子巴壁虎个人主页-哔哩哔哩视频

概率模块包

Uber的Pyro基于Pytorch

Google的Edward基于TensorFlow

还有一些独立的像

PyMC3,

Stan,

Pomegranate等等
其他代码链接(python2.7 和pyro比较老的版本):

https://github.com/Rachnog/Deep-Trading/tree/master/bayesian

为了更深入了解概率编程、贝叶斯模型及其应用,我推荐以下资源给大家:

模式识别和机器学习:

http://www.springer.com/us/book/9780387310732

为黑客设计的贝叶斯方法:

https://www.amazon.com/Bayesian-Methods-Hackers-Probabilistic-Addison-Wesley/dp/0133902838

同时推荐以下python库:

PyMC3:

https://github.com/pymc-devs/pymc3

Edward:

http://edwardlib.org/

Pyro:

http://pyro.ai/

最佳化

该模块pyro.optim为Pyro中的优化提供支持。特别是,它提供了焦光性,用于包装PyTorch优化器并管理动态生成参数的优化器(参见教程SVI第一部分供讨论)。任何自定义优化算法也可以在这里找到。

Pyro Optimizers

is_scheduler(optimizer )→ bool[source]

帮助器方法,用于确定PyTorch对象是PyTorch优化器(返回false)还是包装在LRScheduler中的优化器ReduceLROnPlateau或子类_LRScheduler(返回真)。

class PyroOptim(optim_constructor: Union[Callable, torch.optim.optimizer.Optimizer, Type[torch.optim.optimizer.Optimizer]] , optim_args: Union[Dict, Callable[[...], Dict]] , clip_args: Optional[Union[Dict, Callable[[...], Dict]]] = None

base:object

torch.optim.Optimizer对象的包装器,有助于管理动态生成的参数。

因素

  • optim_constructor--torch . optim . optimizer

  • optim_args--优化器的学习参数字典或返回此类字典的可调用程序

  • clip_args --clip _ norm和/或clip_value参数的字典或返回此类字典的callable

call(params: Union[List, ValuesView] , *args , **kwargs )→ None[source]

因素

参数 (可重复的字符串)--参数列表

对params中的每个参数执行优化步骤。如果一个给定的参数以前从未出现过,为它初始化一个优化器。

get_state()→ Dict[source]

以带有键值对的字典的形式获得与所有优化器相关的状态(参数名,优化状态字典)

set_state(state_dict: Dict )→ None[source]

使用从以前对get_state()的调用中获得的状态,设置与所有优化器关联的状态

save(filename: str )→ None[source]

load(filename: str , map_location=None )→ None[source]

Parameters

  • filename (str) -- file name to load from

  • map_location (function , torch.device, string or a dict) -- torch.load() map_location parameter

AdagradRMSProp(optim_args: Dict )→ pyro.optim.optim.PyroOptim[source]

Wraps pyro.optim.adagrad_rmsprop.AdagradRMSProp with PyroOptim.

ClippedAdam(optim_args: Dict )→ pyro.optim.optim.PyroOptim[source]

Wraps pyro.optim.clipped_adam.ClippedAdam with PyroOptim.

DCTAdam(optim_args: Dict )→ pyro.optim.optim.PyroOptim[source]

Wraps pyro.optim.dct_adam.DCTAdam with PyroOptim.

class PyroLRScheduler(scheduler_constructor , optim_args: Dict , clip_args: Optional[Dict] = None )[source]

Bases: pyro.optim.optim.PyroOptim

A wrapper for lr_scheduler objects that adjusts learning rates for dynamically generated parameters.

Parameters

  • scheduler_constructor -- a lr_scheduler

  • optim_args -- a dictionary of learning arguments for the optimizer or a callable that returns such dictionaries. must contain the key 'optimizer' with pytorch optimizer value

  • clip_args -- a dictionary of clip_norm and/or clip_value args or a callable that returns such dictionaries.

从磁盘加载优化程序状态

Pyro 这个概率编程框架中,你提到的几个函数和类是用于优化模型参数的。它们主要用于在训练过程中调整参数,以提高模型的性能。下面是每个函数和类的作用:

  1. AdagradRMSProp(optim_args: Dict) → pyro.optim.optim.PyroOptim[source]

    • 这个函数将 AdagradRMSProp 优化器包装在 PyroOptim 中。AdagradRMSProp 是一种结合了 Adagrad 和 RMSProp 优点的优化算法,它适用于稀疏梯度的场景。Adagrad 能够为每个参数自适应地调整学习率,而 RMSProp 则通过指数移动平均来调整梯度的平方,从而实现对参数的自适应学习率调整。
  2. ClippedAdam(optim_args: Dict) → pyro.optim.optim.PyroOptim[source]

    • ClippedAdam 函数将 ClippedAdam 优化器包装在 PyroOptim 中。ClippedAdam 是 Adam 优化器的一个变种,它在更新参数前会对梯度进行裁剪,以防止梯度爆炸问题。这对于训练深度学习模型时保持训练过程的稳定性非常有用。
  3. DCTAdam(optim_args: Dict) → pyro.optim.optim.PyroOptim[source]

    • DCTAdam 函数将 DCTAdam 优化器包装在 PyroOptim 中。DCTAdam 是一种基于离散余弦变换(Discrete Cosine Transform, DCT)的优化器,它通过在参数更新中引入 DCT 来提高优化效率和模型性能。
  4. class PyroLRScheduler(scheduler_constructor, optim_args: Dict, clip_args: Optional[Dict] = None)[source]

    • PyroLRScheduler 是一个类,用于构建学习率调度器。它接受一个调度器构造函数 scheduler_constructor 和优化器参数 optim_args,以及可选的裁剪参数 clip_args。学习率调度器用于在训练过程中根据一定的策略调整学习率,比如随着训练的进行逐渐减小学习率,以帮助模型更好地收敛。

AdagradRMSProp(optim_args: 词典 )→ 派若姆,派若姆,派若姆[来源]

包装pyro.optim.adagrad_rmsprop.AdagradRMSProp随着PyroOptim.

ClippedAdam(optim_args: Dict )→ pyro.optim.optim.PyroOptim[source]

包装pyro.optim.clipped_adam.ClippedAdam随着PyroOptim.

DCTAdam(optim_args: Dict )→ pyro.optim.optim.PyroOptim[source]

包装pyro.optim.dct_adam.DCTAdam随着PyroOptim.

class PyroLRScheduler(scheduler_constructor , optim_args: Dict , clip_args: Optional[Dict] = None )[source]

base:pyro.optim.optim.PyroOptim

的包装纸lr_scheduler对象,这些对象为动态生成的参数调整学习率。

因素

  • scheduler_constructor --a lr_scheduler

  • optim_args--优化器的学习参数字典或返回此类字典的可调用程序。必须包含具有pytorch优化器值的键"优化器"

  • clip_args --clip _ norm和/或clip_value参数的字典或返回此类字典的callable。

示例:

注释:原版 gamma 是 0.1,一般是0.95以上

复制代码
optimizer = torch.optim.SGD
scheduler = pyro.optim.ExponentialLR({'optimizer': optimizer, 'optim_args': {'lr': 0.01}, 'gamma': 0.95})
svi = SVI(model, guide, scheduler, loss=TraceGraph_ELBO())
for i in range(epochs):
    for minibatch in DataLoader(dataset, batch_size):
        svi.step(minibatch)
    scheduler.step()

call(params: Union[List, ValuesView] , *args , **kwargs )→ None[source]

step(*args , **kwargs )→ None[source]

Takes the same arguments as the PyTorch scheduler (e.g. optional loss for ReduceLROnPlateau)

采用与PyTorch调度程序相同的参数(例如可选的lossReduceLROnPlateau)

class AdagradRMSProp(params , eta: float = 1.0 , delta: float = 1e-16 , t: float = 0.1 )[source]

Bases: torch.optim.optimizer.Optimizer

碱基:torch.optim.optimizer.Optimizer

实现了Adagrad算法和RMSProp的混搭。关于精确的更新公式,参见参考文献[1]中的公式10和11。

参考文献:[1]《自动微分变分推理》,Alp Kucukelbir,Dustin Tran,Rajesh Ranganath,Andrew Gelman,David M. Blei URL:https://arxiv.org/abs/1603.00788[2]"讲座6.5 RmsProp:将梯度除以其最近大小的移动平均值",Tieleman,t .和Hinton,g .,COURSERA:用于机器学习的神经网络。[3]"在线学习和随机优化的自适应次梯度方法",杜奇,约翰,哈赞,E和辛格,y

参数:

因素

  • params --要优化的可迭代参数或定义参数组的字典

  • eta (float)--设置步长比例(可选;默认值:1.0)

  • t (float)--t,可选):动量参数(可选;默认值:0.1)

  • delta (float) --调制控制步长缩放方式的指数(可选:默认值:1e-16)

share_memory()→ None[source]

step(closure: Optional[Callable] = None )→ Optional[Any][source]

执行单个优化步骤。

因素

Parameters closure --重新评估模型并返回损失的(可选)关闭。

class ClippedAdam(params , lr: float = 0.001 , betas: Tuple = (0.9, 0.999) , eps: float = 1e-08 , weight_decay=0 , clip_norm: float = 10.0 , lrd: float = 1.0 )[source]

base:torch.optim.optimizer.Optimizer

因素

  • params--要优化的可迭代参数或定义参数组的字典

  • lr --学习率(默认值:1e-3)

  • betas (Tuple--用于计算梯度及其平方的移动平均值的系数(默认值:(0.9,0.999))

  • eps--添加到分母中以提高数值稳定性的术语(默认值:1e-8)

  • weight_decay --重量衰减(L2惩罚)(默认值:0)

  • clip_norm--渐变裁剪到的范数的大小(默认值:10.0)

  • lrd(living related donor)--学习率衰减的速率(默认值:1.0)

对torch.optim.Adam中实现的Adam算法进行了小的修改,以包括梯度裁剪和学习率衰减。

参考

随机优化的一种方法、迪德里克·金马、吉米·巴https://arxiv.org/abs/1412.6980

step(closure: Optional[Callable] = None )→ Optional[Any][source]

Parameters

closure -- An optional closure that reevaluates the model and returns the loss.

执行单个优化步骤。

class HorovodOptimizer(pyro_optim: pyro.optim.optim.PyroOptim , **horovod_kwargs )[source]

base:pyro.optim.optim.PyroOptim

的分布式包装PyroOptim优化器。

该类包装了一个PyroOptim对象类似的方式horovod.torch.DistributedOptimizer()包装atorch.optim.Optimizer.

注意

这需要horovod.torch待安装,例如通过pip install pyro[horovod]。详情请见https://horovod.readthedocs.io/en/stable/install.html

参数

Param

A Pyro optimizer instance.

Parameters

**horovod_kwargs -- Extra parameters passed to horovod.torch.DistributedOptimizer().

call(params: Union[List, ValuesView] , *args , **kwargs )→ None[source]

PyTorch优化器

pytorch 的一些优化器,pyro 重新继承了下,分别在 pyroOptim类和 PyroLRScheduler.类下面

Adadelta(optim_args , clip_args=None )

Wraps torch.optim.Adadelta with PyroOptim.

Adagrad(optim_args , clip_args=None )

Wraps torch.optim.Adagrad with PyroOptim.

Adam(optim_args , clip_args=None )

Wraps torch.optim.Adam with PyroOptim.

AdamW(optim_args , clip_args=None )

Wraps torch.optim.AdamW with PyroOptim.

SparseAdam(optim_args , clip_args=None )

Wraps torch.optim.SparseAdam with PyroOptim.

Adamax(optim_args , clip_args=None )

Wraps torch.optim.Adamax with PyroOptim.

ASGD(optim_args , clip_args=None )

Wraps torch.optim.ASGD with PyroOptim.

SGD(optim_args , clip_args=None )

Wraps torch.optim.SGD with PyroOptim.

RAdam(optim_args , clip_args=None )

Wraps torch.optim.RAdam with PyroOptim.

Rprop(optim_args , clip_args=None )

Wraps torch.optim.Rprop with PyroOptim.

RMSprop(optim_args , clip_args=None )

Wraps torch.optim.RMSprop with PyroOptim.

NAdam(optim_args , clip_args=None )

Wraps torch.optim.NAdam with PyroOptim.

LRScheduler(optim_args , clip_args=None )

Wraps torch.optim.LRScheduler with PyroLRScheduler.

LambdaLR(optim_args , clip_args=None )

Wraps torch.optim.LambdaLR with PyroLRScheduler.

MultiplicativeLR(optim_args , clip_args=None )

Wraps torch.optim.MultiplicativeLR with PyroLRScheduler.

StepLR(optim_args , clip_args=None )

Wraps torch.optim.StepLR with PyroLRScheduler.

MultiStepLR(optim_args , clip_args=None )

Wraps torch.optim.MultiStepLR with PyroLRScheduler.

ConstantLR(optim_args , clip_args=None )

Wraps torch.optim.ConstantLR with PyroLRScheduler.

LinearLR(optim_args , clip_args=None )

Wraps torch.optim.LinearLR with PyroLRScheduler.

ExponentialLR(optim_args , clip_args=None )

Wraps torch.optim.ExponentialLR with PyroLRScheduler.

SequentialLR(optim_args , clip_args=None )

Wraps torch.optim.SequentialLR with PyroLRScheduler.

PolynomialLR(optim_args , clip_args=None )

Wraps torch.optim.PolynomialLR with PyroLRScheduler.

CosineAnnealingLR(optim_args , clip_args=None )

Wraps torch.optim.CosineAnnealingLR with PyroLRScheduler.

ChainedScheduler(optim_args , clip_args=None )

Wraps torch.optim.ChainedScheduler with PyroLRScheduler.

ReduceLROnPlateau(optim_args , clip_args=None )

Wraps torch.optim.ReduceLROnPlateau with PyroLRScheduler.

CyclicLR(optim_args , clip_args=None )

Wraps torch.optim.CyclicLR with PyroLRScheduler.

CosineAnnealingWarmRestarts(optim_args , clip_args=None )

Wraps torch.optim.CosineAnnealingWarmRestarts with PyroLRScheduler.

OneCycleLR(optim_args , clip_args=None )

Wraps torch.optim.OneCycleLR with PyroLRScheduler.

高阶优化器

class MultiOptimizer[source]

base:object

利用高阶导数的优化器的基类。

高阶优化器通常使用torch.autograd.grad()而不是torch.Tensor.backward(),因此需要一个与通常的Pyro和PyTorch优化器不同的接口。在此界面中step()方法输入aloss张量进行微分,并且反向传播在优化器内部被触发一次或多次。

派生类必须实现step()计算导数并就地更新参数。

示例:

复制代码
tr = poutine.trace(model).get_trace(*args, **kwargs)
loss = -tr.log_prob_sum()
params = {name: site['value'].unconstrained()
          for name, site in tr.nodes.items()
          if site['type'] == 'param'}
optim.step(loss, params)

步骤(失败: 火炬。张量 , 参数: 词典 )→ 没有人[来源]

对给定的可微分参数执行就地优化步骤loss张量。

请注意,这将分离更新的张量。

Parameters

  • loss (torch.Tensor) --一个要最小化的可微张量。一些优化器要求它可以多次微分。

  • params (dict)--将参数名称映射到存储在参数存储中的无约束值的字典。

get_step(loss: torch.Tensor , params: Dict )→ Dict[source]

给定一个微分,计算参数的优化步骤loss张量,返回更新后的值。

注意,这保留了更新张量的导数。

因素

  • loss (torch.Tensor) --一个要最小化的可微张量。一些优化器要求它可以多次微分。

  • params (dict) --将参数名称映射到存储在参数存储中的无约束值的字典。

返回 将参数名映射到更新的无约束值的字典。

返回类型

词典

class PyroMultiOptimizer(optim: pyro.optim.optim.PyroOptim )[source]

base:pyro.optim.multi.MultiOptimizer

要包装的外观PyroOptim中的对象MultiOptimizer界面。

step(loss: torch.Tensor , params: Dict )→ None[source]
class TorchMultiOptimizer(optim_constructor: torch.optim.optimizer.Optimizer , optim_args: Dict )[source]

base :pyro.optim.multi.PyroMultiOptimizer

要包装的外观Optimizer中的对象MultiOptimizer界面 接口。

class MixedMultiOptimizer(parts: List )[source]

base:pyro.optim.multi.MultiOptimizer

容器类来组合不同的MultiOptimizer不同参数的实例。

Parameters

parts (list) --一个列表(names, optim)成对,其中每个names是参数名列表,每个optim是一个MultiOptimizer或者PyroOptim用于命名参数的。一起names应该划分所有期望的参数以进行优化。

Raises

值错误--如果任何名称被多个优化器优化。trust_radius。看见newton_step()详情请见。

step(loss: torch.Tensor , params: Dict )[source]

get_step(loss: torch.Tensor , params: Dict )→ Dict[source]

class Newton(trust_radii: Dict = {} )[source]

牛顿(信任半径: 词典 = {} )[来源]

base:pyro.optim.multi.MultiOptimizer

实施MultiOptimizer它对成批的低维变量执行牛顿更新,可选地通过每个参数进行正则化

The result of get_step() will be differentiable, however the updated values from step() will be detached.

Parameters

trust_radii (dict) -- a dict mapping parameter name to radius of trust region. Missing names will use unregularized Newton update, equivalent to infinite trust radius.

get_step(loss: torch.Tensor , params: Dict )[source]

`get_step` 函数的目的是计算在给定损失函数和参数的情况下的优化步骤。这个步骤是可微分的,意味着可以通过梯度下降或其他优化算法来更新参数。

参数 `trust_radii` 是一个字典,它将参数名称映射到信任域的半径。如果某个参数名称没有在字典中出现,那么这个参数将使用未正则化的牛顿更新,这相当于有无限大的信任域半径。

  • **可微分(differentiable)**:指的是函数在某一点或某一区间内可以求导的性质。在机器学习和深度学习中,可微分性是非常重要的,因为它允许我们使用梯度下降等优化算法来训练模型。

  • **信任域(trust region)**:在优化问题中,信任域是一种用于确定参数更新步长的技术。它定义了一个区域,在这个区域内,我们认为函数的行为可以通过其一阶和二阶泰勒展开来良好地近似。

  • **未正则化的牛顿更新(unregularized Newton update)**:这是一种优化算法,它使用函数的一阶导数(梯度)和二阶导数(Hessian矩阵)来计算参数的更新。这种方法在理论上具有二次收敛速度,比梯度下降法更快,但它也需要计算Hessian矩阵,这在计算上可能非常昂贵。

当 `get_step` 函数计算出一个更新步骤后,`step` 函数会应用这个步骤来更新参数。在这个过程中,更新后的值会被"分离"(detached),意味着它们将不再参与自动梯度计算,这通常是为了避免计算图中的梯度在反向传播时被累积或传播。

相关推荐
FreakStudio42 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
artificiali2 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
RaidenQ3 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计
花生了什么树~.3 小时前
python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用
开发语言·python
酱香编程,风雨兼程3 小时前
深度学习——基础知识
人工智能·深度学习
Lossya3 小时前
【机器学习】参数学习的基本概念以及贝叶斯网络的参数学习和马尔可夫随机场的参数学习
人工智能·学习·机器学习·贝叶斯网络·马尔科夫随机场·参数学习
Trouvaille ~3 小时前
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
图像处理·python·机器学习·numpy·信号处理·时间序列分析·科学计算
爆更小小刘3 小时前
Python基础语法(3)下
开发语言·python
哪 吒3 小时前
华为OD机试 - 第 K 个字母在原来字符串的索引(Python/JS/C/C++ 2024 E卷 100分)
javascript·python·华为od