如何解决如何使用pytorch优化离散值的分布?
我们可以轻松地使用pytorch中的自动微分对许多优化问题进行梯度下降。但是,当我使用相同的策略来查找一组离散值的分布时,我会遇到麻烦。为了简化我的问题,假设我正在尝试估计数据流的分布,该数据流只有5个值:[0、1、2、3、4]。我决定使用张量估计其分布,而不是在本地获取和存储许多这些值。没有任何先验信息,我的张量对所有这5个数字的权重相等:
import torch
distribution = torch.ones(5,requires_grad=True)
distribution.data = distribution.data / torch.sum(distribution.data)
distribution # tensor([0.2000,0.2000,0.2000],requires_grad=True)
然后,对于数据流中的每个传入号码,抓取并存储:
true_val = data_stream_input()
现在,使用电流分布从[0,4]中随机抽取一个数字100次,并查看它与数据流中的数字重合多少次,并对距离真实值较远的数字进行惩罚:
import numpy as np
loss = torch.tensor(0).double()
for _ in range(100):
sampled_val = np.random.choice(5,size=1,p=distribution)
loss += torch.square(sampled_val - true_val)
最后,使用梯度下降来更新分布:
loss.backward()
distribution.data = distribution.data - step_size * distribution.grad
distribution.grad.detach()
distribution.grad.zero_()
但是,在[loss.backward()]上,我得到一个错误:RuntimeError:张量的元素0不需要grad并且没有grad_fn。
任何人都可以建议解决方法吗?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。