Has*_*tax 1 machine-learning deep-learning pytorch
使用multinomial
而不是直线上升来评估预测准确性的目的是什么argmax
?
probs_Y = torch.softmax(model(test_batch, feature_1, feature_2), 1)
sampled_Y = torch.multinomial(probs_Y, 1)
argmax_Y = torch.max(probs_Y, 1)[1].view(-1, 1)
print('Accuracy of sampled predictions on the test set: {:.4f}%'.format(
(test_Y == sampled_Y.float()).sum().item() / len(test_Y) * 100))
print('Accuracy of argmax predictions on the test set: {:4f}%'.format(
(test_Y == argmax_Y.float()).sum().item() / len(test_Y) * 100))
Run Code Online (Sandbox Code Playgroud)
结果:
Accuracy of sampled predictions on the test set: 88.8889%
Accuracy of argmax predictions on the test set: 97.777778%
Run Code Online (Sandbox Code Playgroud)
阅读 pytorch 文档,看起来多项式是根据某种分布进行采样的 - 只是不确定这与评估准确性有什么关系。
我注意到多项式是非确定性的——这意味着它每次运行时都会输出不同的准确度,大概是通过包含不同的样本。
在这里,multinomial
我们用多项式分布对类进行采样。
从维基百科的例子,
假设在一个大国的三方选举中,候选人A获得20%的选票,候选人B获得30%的选票,候选人C获得50%的选票。如果随机选择 6 名选民,样本中恰好有 1 名候选人 A、2 名候选人 B 和 3 名候选人 C 的概率是多少?
注意:由于我们假设投票人口很大,因此一旦为样本选择了选民,将概率视为不变是合理且允许的。从技术上讲,这是无放回抽样,因此正确的分布是多元超几何分布,但随着总体增长,分布会收敛。
如果我们仔细观察,我们也在做同样的事情,抽样而不放回。
torch.multinomial(input, num_samples, replacement=False, *, generator=None, out=None)
参考:https : //pytorch.org/docs/stable/torch.html? highlight = torch%20multinomial# torch.multinomial
多项实验是一种统计实验,它由 n 次重复试验组成。每个试验都有离散数量的可能结果。在任何给定的试验中,特定结果发生的概率是恒定的(这是最初的假设)。
因此,可以用概率模拟投票计数。软输出的分类是一个类似的投票过程。
如果我们重复实验足够多的次数,我们将尽可能接近实际概率。
例如,让我们从初始probs = [0.1, 0.1, 0.3, 0.5]
.
我们可以重复实验n
次数并计算索引被 选择的次数torch.multinomial
。
import torch
cnt = [0, 0, 0, 0]
for _ in range(5000):
sampled_Y = torch.multinomial(torch.tensor([0.1, 0.1, 0.3, 0.5]), 1)
cnt[sampled_Y[0]] += 1
print(cnt)
Run Code Online (Sandbox Code Playgroud)
50次迭代后: [6, 3, 14, 27]
5000 次迭代后: [480, 486, 1525, 2509]
50000 次迭代后: [4988, 4967, 15062, 24983]
但是,这在模型评估中是可以避免的,因为它不是确定性的,并且需要随机生成器来模拟实验。这对于蒙特卡罗模拟、先验后验计算特别有用。我看过一个图分类示例,其中使用了这种评估。但我认为它在机器学习的大多数分类任务中并不常见(甚至有用)。
归档时间: |
|
查看次数: |
552 次 |
最近记录: |