当前位置: 首页 > news >正文

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

英文文档在这里

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

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

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

- [PyMC3](https://github.com/pymc-devs/pymc3):一个Python库,用于贝叶斯统计建模和概率机器学习。

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

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


- [Edward](http://edwardlib.org/):一个用于概率建模、推断和深度学习的库。
- [Pyro](http://pyro.ai/):一个灵活的通用概率编程框架。

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

https://www.bilibili.com/video/BV1VF411k7Lm/?spm_id_from=autoNext&vd_source=7d3841cb81fdca8b20a31fa9ee5ec8ef

 基于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: strmap_location=None)→ None[source]¶

Parameters

  • filename (str) – file name to load from

  • map_location (functiontorch.devicestring or a dict) – torch.load() map_location parameter

  • 文件名 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–从中加载的文件名

  • 地图_位置 (功能手电筒.设备线或者格言)–torch . load()map _ location参数

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_constructoroptim_args: Dictclip_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.

               从磁盘加载优化程序状态

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_constructoroptim_args: Dictclip_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(paramseta: float = 1.0delta: float = 1e-16t: 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(paramslr: float = 0.001betas: Tuple = (0.9, 0.999)eps: float = 1e-08weight_decay=0clip_norm: float = 10.0lrd: 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_argsclip_args=None

Wraps torch.optim.Adadelta with PyroOptim.

Adagrad(optim_argsclip_args=None

Wraps torch.optim.Adagrad with PyroOptim.

Adam(optim_argsclip_args=None

Wraps torch.optim.Adam with PyroOptim.

AdamW(optim_argsclip_args=None

Wraps torch.optim.AdamW with PyroOptim.

SparseAdam(optim_argsclip_args=None

Wraps torch.optim.SparseAdam with PyroOptim.

Adamax(optim_argsclip_args=None

Wraps torch.optim.Adamax with PyroOptim.

ASGD(optim_argsclip_args=None

Wraps torch.optim.ASGD with PyroOptim.

SGD(optim_argsclip_args=None

Wraps torch.optim.SGD with PyroOptim.

RAdam(optim_argsclip_args=None

Wraps torch.optim.RAdam with PyroOptim.

Rprop(optim_argsclip_args=None

Wraps torch.optim.Rprop with PyroOptim.

RMSprop(optim_argsclip_args=None

Wraps torch.optim.RMSprop with PyroOptim.

NAdam(optim_argsclip_args=None

Wraps torch.optim.NAdam with PyroOptim.

LRScheduler(optim_argsclip_args=None

Wraps torch.optim.LRScheduler with PyroLRScheduler.

LambdaLR(optim_argsclip_args=None

Wraps torch.optim.LambdaLR with PyroLRScheduler.

MultiplicativeLR(optim_argsclip_args=None

Wraps torch.optim.MultiplicativeLR with PyroLRScheduler.

StepLR(optim_argsclip_args=None

Wraps torch.optim.StepLR with PyroLRScheduler.

MultiStepLR(optim_argsclip_args=None

Wraps torch.optim.MultiStepLR with PyroLRScheduler.

ConstantLR(optim_argsclip_args=None

Wraps torch.optim.ConstantLR with PyroLRScheduler.

LinearLR(optim_argsclip_args=None

Wraps torch.optim.LinearLR with PyroLRScheduler.

ExponentialLR(optim_argsclip_args=None

Wraps torch.optim.ExponentialLR with PyroLRScheduler.

SequentialLR(optim_argsclip_args=None

Wraps torch.optim.SequentialLR with PyroLRScheduler.

PolynomialLR(optim_argsclip_args=None

Wraps torch.optim.PolynomialLR with PyroLRScheduler.

CosineAnnealingLR(optim_argsclip_args=None

Wraps torch.optim.CosineAnnealingLR with PyroLRScheduler.

ChainedScheduler(optim_argsclip_args=None

Wraps torch.optim.ChainedScheduler with PyroLRScheduler.

ReduceLROnPlateau(optim_argsclip_args=None

Wraps torch.optim.ReduceLROnPlateau with PyroLRScheduler.

CyclicLR(optim_argsclip_args=None

Wraps torch.optim.CyclicLR with PyroLRScheduler.

CosineAnnealingWarmRestarts(optim_argsclip_args=None

Wraps torch.optim.CosineAnnealingWarmRestarts with PyroLRScheduler.

OneCycleLR(optim_argsclip_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.Tensorparams: 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.Tensorparams: Dict)→ None[source]¶

class TorchMultiOptimizer(optim_constructor: torch.optim.optimizer.Optimizeroptim_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.Tensorparams: Dict)[source]¶

get_step(loss: torch.Tensorparams: 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.Tensorparams: Dict)[source]¶

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

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

- **可微分(differentiable)**:指的是函数在某一点或某一区间内可以求导的性质。在机器学习和深度学习中,可微分性是非常重要的,因为它允许我们使用梯度下降等优化算法来训练模型。
- **信任域(trust region)**:在优化问题中,信任域是一种用于确定参数更新步长的技术。它定义了一个区域,在这个区域内,我们认为函数的行为可以通过其一阶和二阶泰勒展开来良好地近似。
- **未正则化的牛顿更新(unregularized Newton update)**:这是一种优化算法,它使用函数的一阶导数(梯度)和二阶导数(Hessian矩阵)来计算参数的更新。这种方法在理论上具有二次收敛速度,比梯度下降法更快,但它也需要计算Hessian矩阵,这在计算上可能非常昂贵。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 食品安全管理员考试真题题库及答案
  • Python爬虫—教你用Python爬取小说,小白也能操作(附源码)
  • 【C++ Primer Plus习题】10.4
  • 量子运算-计算新时代的开端
  • Java健康养老智慧相伴养老护理小程序系统源码代办陪诊陪护更安心
  • Nginx: 性能优化之提升CPU效率以及TCP的三次握手和四次挥手
  • Linux 初次创建分区及磁盘挂载
  • SPEC CPU2017的runcpu命令使用
  • 【Java】将 Java 代码打包成 Jar 包
  • Etl加工建模方式分类使用
  • 智能制造新纪元:3D协同平台引领前沿创新
  • Python【3】乌七八糟
  • 线性回归算法详解
  • 在Centos中的mysql的备份与恢复
  • 银河麒麟v10安装 python 3.12.5版本
  • [Vue CLI 3] 配置解析之 css.extract
  • java8-模拟hadoop
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Theano - 导数
  • vue-cli在webpack的配置文件探究
  • Webpack入门之遇到的那些坑,系列示例Demo
  • XML已死 ?
  • 对象引论
  • 今年的LC3大会没了?
  • 聊一聊前端的监控
  • 树莓派 - 使用须知
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​补​充​经​纬​恒​润​一​面​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #565. 查找之大编号
  • #nginx配置案例
  • (2)STL算法之元素计数
  • (poj1.2.1)1970(筛选法模拟)
  • (python)数据结构---字典
  • (ZT)出版业改革:该死的死,该生的生
  • (第27天)Oracle 数据泵转换分区表
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (循环依赖问题)学习spring的第九天
  • (转)scrum常见工具列表
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *p++,*(p++),*++p,(*p)++区别?
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net framework 4.0中如何 输出 form 的name属性。
  • @Async 异步注解使用
  • @RequestMapping用法详解
  • @Valid和@NotNull字段校验使用
  • [.net]官方水晶报表的使用以演示下载
  • []C/C++读取串口接收到的数据程序
  • [2]十道算法题【Java实现】
  • [AI Google] Ask Photos: 使用Gemini搜索照片的新方法
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Android]如何调试Native memory crash issue
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [Big Data - Kafka] kafka学习笔记:知识点整理