pytorch在强化学习中的应用

pytorch在强化学习中的应用

torch.distributions.categorical

  • Categorical()
    可以按照一定概率产生具体数字
from torch.distributions.categorical import Categorical
rand = Categorical(torch.tensor([0.25,0.25,0.25,0.25]))
# 按[0.25,0.25,0.25,0.25]的概率去生成[0,1,2,3]
print(rand.sample())
  • 这个Categorical()还有一些有趣的功能,比如在离散型分布情况下可以求策略梯度REINFORCE。
cat = Categorical()
action = cat.sample() #根据概率选择
cat.log_prob(action) #假设有4类,输出为[1,2,3,4]。我们想知道第三类(假设action 为 2)的log probability。

pytorch在强化学习中的应用_第1张图片

  • 直接就是公式中的log部分

torch.distributions.normal

用于连续性

class torch.distributions.normal.Normal(loc, scale, validate_args=None)

基类:torch.distributions.exp_family.ExponentialFamily
创建由loc和scale参数化的正态分布(高斯分布)。
loc (float or Tensor) — 均值(也被称为mu)
scale (float or Tensor) — 标准差 (也被称为sigma)

from torch.distributions.normal import Normal
Normal(mu, std) # mu为预测结果,std为可训练的方差

pytorch训练过程

optimizer.zero_grad()             ## 梯度清零
preds = model(inputs)             ## inference
loss = criterion(preds, targets)  ## 求解loss
loss.backward()                   ## 反向传播求解梯度
optimizer.step()                  ## 更新权重参数
如若不显示的进行optimizer.zero_grad()这一步操作,backward()的时候就会累加梯度,也就有了各位答主所说到的梯度累加这种trick。
  • Smooth L1 Loss(Huber):pytorch中的计算原理及使用问题

你可能感兴趣的:(强化学习)