torcheval.metrics.MulticlassConfusionMatrix¶
- class torcheval.metrics.MulticlassConfusionMatrix(num_classes: int, *, normalize: str | None = None, device: device | None = None)¶
计算多类混淆矩阵,一个维度为 num_classes x num_classes 的矩阵,其中位置 (i,j) 的每个元素是预测为类别 j 的真实类别为 i 的示例数量。
- 参数:
input (Tensor) – 标签预测的张量。它可以是预测的标签,形状为 (n_sample, )。它也可以是形状为 (n_sample, n_class) 的概率或 logits。
torch.argmax
将用于将输入转换为预测的标签。target (Tensor) – 形状为 (n_sample, ) 的真实标签张量。
num_classes (int) – 类别数量。
normalize (str) –
None
[默认]提供原始计数('none' 也默认为此)
'pred'
:跨预测类别进行归一化,即使行加起来为 1。
'true'
:跨条件正值进行归一化,即使列加起来为 1。
'all'
”跨所有示例进行归一化,即使所有矩阵条目加起来为 1。
device (torch.device) – 内部张量的设备
示例
>>> import torch >>> from torcheval.metrics import MulticlassConfusionMatrix >>> input = torch.tensor([0, 2, 1, 3]) >>> target = torch.tensor([0, 1, 2, 3]) >>> metric = MulticlassConfusionMatrix(4) >>> metric.update(input, target) >>> metric.compute() tensor([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) >>> input = torch.tensor([0, 0, 1, 1, 1]) >>> target = torch.tensor([0, 0, 0, 0, 1]) >>> metric = MulticlassConfusionMatrix(2) >>> metric.update(input, target) >>> metric.compute() tensor([[2, 2], [0, 1]]) >>> input = torch.tensor([0, 0, 1, 1, 1, 2, 1, 2]) >>> target = torch.tensor([2, 0, 2, 0, 1, 2, 1, 0]) >>> metric = MulticlassConfusionMatrix(3) >>> metric.update(input, target) >>> metric.compute() tensor([[1, 1, 1], [0, 2, 0], [1, 1, 1]]) >>> input = torch.tensor([0, 0, 1, 1, 1, 2, 1, 2]) >>> target = torch.tensor([2, 0, 2, 0, 1, 2, 1, 0]) >>> metric = MulticlassConfusionMatrix(3) >>> metric.update(input, target) >>> metric.compute() tensor([[1., 1., 1.], [0., 2., 0.], [1., 1., 1.]]) >>> metric.normalized("pred") tensor([[0.5000, 0.2500, 0.5000], [0.0000, 0.5000, 0.0000], [0.5000, 0.2500, 0.5000]]) >>> metric.normalized("true") tensor([[0.3333, 0.3333, 0.3333], [0.0000, 1.0000, 0.0000], [0.3333, 0.3333, 0.3333]]) >>> metric.normalized("all") tensor([[0.1250, 0.1250, 0.1250], [0.0000, 0.2500, 0.0000], [0.1250, 0.1250, 0.1250]]) >>> input = torch.tensor([0, 0, 1, 1, 1, 2, 1, 2]) >>> target = torch.tensor([2, 0, 2, 0, 1, 2, 1, 0]) >>> metric = MulticlassConfusionMatrix(3, normalize="true") >>> metric.update(input, target) >>> metric.compute() tensor([[0.3333, 0.3333, 0.3333], [0.0000, 1.0000, 0.0000], [0.3333, 0.3333, 0.3333]]) >>> metric.normalized(None) tensor([[1., 1., 1.], [0., 2., 0.], [1., 1., 1.]]) >>> input = torch.tensor([0, 0, 1, 1, 1]) >>> target = torch.tensor([0, 0, 0, 0, 1]) >>> metric = MulticlassConfusionMatrix(4) >>> metric.update(input, target) >>> metric.compute() tensor([[2, 2, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) >>> input = torch.tensor([[0.9, 0.1, 0, 0], [0.1, 0.2, 0.4, 0.3], [0, 1.0, 0, 0], [0, 0, 0.2, 0.8]]) >>> target = torch.tensor([0, 1, 2, 3]) >>> metric = MulticlassConfusionMatrix(4) >>> metric.update(input, target) >>> metric.compute() tensor([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]])
- __init__(num_classes: int, *, normalize: str | None = None, device: device | None = None) None ¶
初始化一个指标对象及其内部状态。
使用
self._add_state()
初始化指标类的状态变量。状态变量应该是torch.Tensor
、torch.Tensor
列表、带有torch.Tensor
作为值的字典,或torch.Tensor
的 deque。
方法
__init__
(num_classes, *[, normalize, device])初始化一个指标对象及其内部状态。
计算
()返回混淆矩阵。
load_state_dict
(state_dict[, strict])从 state_dict 加载指标状态变量。
merge_state
(metrics)实现此方法以更新当前指标的状态变量,使其成为当前指标和输入指标的合并状态。
normalized
([normalize])返回归一化的混淆矩阵
重置
()将指标状态变量重置为其默认值。
state_dict
()将指标状态变量保存在 state_dict 中。
to
(device, *args, **kwargs)将指标状态变量中的张量移动到设备。
update
(input, target)更新混淆矩阵。
属性
设备
Metric.to()
的最后一个输入设备。