该模块pyro.optim为Pyro中的优化提供支持。特别是,它提供了焦光性,用于包装PyTorch优化器并管理动态生成参数的优化器(参见教程SVI第一部分供讨论)。任何自定义优化算法也可以在这里找到。
is _调度程序(【计算机】优化程序)→ 弯曲件[来源]¶
帮助器方法,用于确定PyTorch对象是PyTorch优化器(返回false)还是包装在LRScheduler中的优化器ReduceLROnPlateau
或子类_LRScheduler
(返回真)。
班级焦光性(optim _构造函数: 联盟[请求即付的, torch . optim . optimizer . optimizer, 类型[torch . optim . optimizer . optimizer]], optim_args: 联盟[词典, 请求即付的[[...], 词典]], 剪辑_参数: 可选择的[联盟[词典, 请求即付的[[...], 词典]]] = 没有人)[来源]¶
碱基:object
torch.optim.Optimizer对象的包装器,有助于管理动态生成的参数。
因素
optim _构造函数–torch . optim . optimizer
optim_args–优化器的学习参数字典或返回此类字典的可调用程序
剪辑_参数–clip _ norm和/或clip_value参数的字典或返回此类字典的callable
__呼叫_ _(参数: 联盟[目录, 值视图], *一个参数名, **夸尔斯)→ 没有人[来源]¶
因素
参数 (可重复的字符串)–参数列表
对params中的每个参数执行优化步骤。如果一个给定的参数以前从未出现过,为它初始化一个优化器。
获取状态()→ 词典[来源]¶
以带有键值对的字典的形式获得与所有优化器相关的状态(参数名,优化状态字典)
设置状态(状态_字典: 词典)→ 没有人[来源]¶
使用从以前对get_state()的调用中获得的状态,设置与所有优化器关联的状态
救援(文件名: 潜艇用热中子反应堆(submarine thermal reactor的缩写))→ 没有人[来源]¶
因素
文件名 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–要保存到的文件名
将优化程序状态保存到磁盘
负荷(文件名: 潜艇用热中子反应堆(submarine thermal reactor的缩写), 地图_位置=没有人)→ 没有人[来源]¶
因素
文件名 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–从中加载的文件名
地图_位置 (功能, 手电筒.设备, 线或者格言)–torch . load()map _ location参数
从磁盘加载优化程序状态
AdagradRMSProp(optim_args: 词典)→ 派若姆,派若姆,派若姆[来源]¶
包装pyro.optim.adagrad_rmsprop.AdagradRMSProp随着PyroOptim.
克利佩达姆(optim_args: 词典)→ 派若姆,派若姆,派若姆[来源]¶
包装pyro.optim.clipped_adam.ClippedAdam随着PyroOptim.
DCTAdam(optim_args: 词典)→ 派若姆,派若姆,派若姆[来源]¶
包装pyro.optim.dct_adam.DCTAdam
随着PyroOptim.
班级热解时间表(调度程序_构造函数, optim_args: 词典, 剪辑_参数: 可选择的[词典] = 没有人)[来源]¶
碱基:pyro.optim.optim.PyroOptim
的包装纸lr_scheduler
对象,这些对象为动态生成的参数调整学习率。
因素
调度程序_构造函数–答lr_scheduler
optim_args–优化器的学习参数字典或返回此类字典的可调用程序。必须包含具有pytorch优化器值的键“优化器”
剪辑_参数–clip _ norm和/或clip_value参数的字典或返回此类字典的callable。
示例:
optimizer = torch.optim.SGD scheduler = pyro.optim.ExponentialLR({'optimizer': optimizer, 'optim_args': {'lr': 0.01}, 'gamma': 0.1}) 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()
__呼叫_ _(参数: 联盟[目录, 值视图], *一个参数名, **夸尔斯)→ 没有人[来源]¶
步骤(*一个参数名, **夸尔斯)→ 没有人[来源]¶
采用与PyTorch调度程序相同的参数(例如可选的loss
为ReduceLROnPlateau
)
班级AdagradRMSProp(参数, 希腊语字母的第七字: 漂浮物 = 1.0, 三角洲: 漂浮物 = 1e-16, t: 漂浮物 = 0.1)[来源]¶
碱基: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
参数:
因素
参数–要优化的可迭代参数或定义参数组的字典
希腊语字母的第七字 (漂浮物)–设置步长比例(可选;默认值:1.0)
t (漂浮物)–t,可选):动量参数(可选;默认值:0.1)
三角洲 (漂浮物)–调制控制步长缩放方式的指数(可选:默认值:1e-16)
共享内存()→ 没有人[来源]¶
步骤(关闭: 可选择的[请求即付的] = 没有人)→ 可选择的[任何的][来源]¶
执行单个优化步骤。
因素
关闭–重新评估模型并返回损失的(可选)关闭。
班级克利佩达姆(参数, 实验室反应堆: 漂浮物 = 0.001, 贝塔: 元组 = (0.9, 0.999), 蓄电池: 漂浮物 = 1e-08, 重量衰减=0, 剪辑_规范: 漂浮物 = 10.0, 亲属活供体(living related donor): 漂浮物 = 1.0)[来源]¶
碱基:torch.optim.optimizer.Optimizer
因素
参数–要优化的可迭代参数或定义参数组的字典
实验室反应堆–学习率(默认值:1e-3)
贝塔 (元组)–用于计算梯度及其平方的移动平均值的系数(默认值:(0.9,0.999))
蓄电池–添加到分母中以提高数值稳定性的术语(默认值:1e-8)
重量衰减–重量衰减(L2惩罚)(默认值:0)
剪辑_规范–渐变裁剪到的范数的大小(默认值:10.0)
亲属活供体(living related donor)–学习率衰减的速率(默认值:1.0)
对torch.optim.Adam中实现的Adam算法进行了小的修改,以包括梯度裁剪和学习率衰减。
参考
随机优化的一种方法、迪德里克·金马、吉米·巴https://arxiv.org/abs/1412.6980
步骤(关闭: 可选择的[请求即付的] = 没有人)→ 可选择的[任何的][来源]¶
因素
关闭–重新评估模型并返回损失的可选关闭。
执行单个优化步骤。
班级HorovodOptimizer(焦光学: 派若姆,派若姆,派若姆, **霍罗沃德夸尔斯)[来源]¶
碱基: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
参数
Pyro优化器实例。
因素
* *霍罗沃德_夸尔格斯–传递给的额外参数horovod.torch.DistributedOptimizer().
__呼叫_ _(参数: 联盟[目录, 值视图], *一个参数名, **夸尔斯)→ 没有人[来源]¶
阿达德尔塔(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.Adadelta随着PyroOptim.
阿达格拉德(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.Adagrad随着PyroOptim.
圣经》和《古兰经》传统中)亚当(人类第一人的名字(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.Adam随着PyroOptim.
阿达姆(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.AdamW随着PyroOptim.
SparseAdam(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.SparseAdam随着PyroOptim.
阿达马克斯(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.Adamax随着PyroOptim.
ASGD(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.ASGD随着PyroOptim.
签名于(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.SGD随着PyroOptim.
拉达姆(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.RAdam随着PyroOptim.
Rprop(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.Rprop随着PyroOptim.
RMSprop(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.RMSprop随着PyroOptim.
那达慕(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.NAdam随着PyroOptim.
LRScheduler(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.LRScheduler
随着PyroLRScheduler.
兰姆达尔(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.LambdaLR
随着PyroLRScheduler.
乘数l(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.MultiplicativeLR
随着PyroLRScheduler.
StepLR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.StepLR
随着PyroLRScheduler.
多步骤(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.MultiStepLR
随着PyroLRScheduler.
ConstantLR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.ConstantLR
随着PyroLRScheduler.
线性LR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.LinearLR
随着PyroLRScheduler.
指数LR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.ExponentialLR
随着PyroLRScheduler.
序列LR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.SequentialLR
随着PyroLRScheduler.
多项式lLR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.PolynomialLR
随着PyroLRScheduler.
CosineAnnealingLR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.CosineAnnealingLR
随着PyroLRScheduler.
链式调度程序(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.ChainedScheduler
随着PyroLRScheduler.
ReduceLROnPlateau(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.ReduceLROnPlateau
随着PyroLRScheduler.
CyclicLR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.CyclicLR
随着PyroLRScheduler.
CosineAnnealingWarmRestarts(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.CosineAnnealingWarmRestarts
随着PyroLRScheduler.
OneCycleLR(optim_args, 剪辑_参数=没有人)¶
包装torch.optim.OneCycleLR
随着PyroLRScheduler.
班级多重优化器[来源]¶
碱基: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
张量。
请注意,这将分离更新的张量。
因素
失败 (火炬。张量)–一个要最小化的可微张量。一些优化器要求它可以多次微分。
参数 (词典)–将参数名称映射到存储在参数存储中的无约束值的字典。
获取_步骤(失败: 火炬。张量, 参数: 词典)→ 词典[来源]¶
给定一个微分,计算参数的优化步骤loss
张量,返回更新后的值。
注意,这保留了更新张量的导数。
因素
失败 (火炬。张量)–一个要最小化的可微张量。一些优化器要求它可以多次微分。
参数 (词典)–将参数名称映射到存储在参数存储中的无约束值的字典。
返回
将参数名映射到更新的无约束值的字典。
返回类型
词典
班级焦多优化器(使最优化: 派若姆,派若姆,派若姆)[来源]¶
碱基:pyro.optim.multi.MultiOptimizer
要包装的外观PyroOptim中的对象MultiOptimizer界面。
步骤(失败: 火炬。张量, 参数: 词典)→ 没有人[来源]¶
班级火炬多重优化器(optim _构造函数: torch . optim . optimizer . optimizer, optim_args: 词典)[来源]¶
碱基:pyro.optim.multi.PyroMultiOptimizer
要包装的外观Optimizer中的对象MultiOptimizer界面。
班级MixedMultiOptimizer(部件: 目录)[来源]¶
碱基:pyro.optim.multi.MultiOptimizer
容器类来组合不同的MultiOptimizer不同参数的实例。
因素
部件 (目录)–一个列表(names, optim)
成对,其中每个names
是参数名列表,每个optim
是一个MultiOptimizer或者PyroOptim用于命名参数的。一起names
应该划分所有期望的参数以进行优化。
举起
值错误–如果任何名称被多个优化器优化。
步骤(失败: 火炬。张量, 参数: 词典)[来源]¶
获取_步骤(失败: 火炬。张量, 参数: 词典)→ 词典[来源]¶
班级牛顿(信任半径: 词典 = {})[来源]¶
碱基:pyro.optim.multi.MultiOptimizer
实施MultiOptimizer它对成批的低维变量执行牛顿更新,可选地通过每个参数进行正则化trust_radius
。看见newton_step()详情请见。
的结果get_step()将是可微分的,但是来自step()
会超脱。
因素
信任半径 (词典)–将参数名称映射到信任区域半径的字典。缺失名称将使用非正则化牛顿更新,相当于无限信任半径。
获取_步骤(失败: 火炬。张量, 参数: 词典)[来源]¶
以前的然后