PyTorch [1 if x > 0.5 else 0 for x in outputs] 带张量
PyTorch [1 if x > 0.5 else 0 for x in outputs ] with tensors
我有一个 sigmoid 函数的列表输出作为 PyTorch 中的张量
例如
output (type) = torch.Size([4]) tensor([0.4481, 0.4014, 0.5820, 0.2877], device='cuda:0',
在进行二元分类时,我想将所有低于 0.5 的值变为 0,将高于 0.5 的所有值变为 1。
传统上,对于 NumPy 数组,您可以使用列表迭代器:
output_prediction = [1 if x > 0.5 else 0 for x in outputs ]
这可行,但是我必须稍后将 output_prediction 转换回张量才能使用
torch.sum(ouput_prediction == labels.data)
其中 labels.data 是标签的二进制张量。
有没有办法将列表迭代器与张量一起使用?
prob = torch.tensor([0.3,0.4,0.6,0.7])
out = (prob>0.5).float()
# tensor([0.,0.,1.,1.])
说明:在pytorch中,可以直接使用prob>0.5
得到一个torch.bool
类型的tensor。然后你可以通过 .float()
.
转换为 float 类型
为什么不考虑使用 loopless 解决方案?也许像下面这样的东西就足够了:
In [34]: output = torch.tensor([0.4481, 0.4014, 0.5820, 0.2877])
# subtract off the threshold value (0.5), create a boolean mask,
# and then cast the resultant tensor to an `int` type
In [35]: result = torch.as_tensor((output - 0.5) > 0, dtype=torch.int32)
In [36]: result
Out[36]: tensor([0, 0, 1, 0], dtype=torch.int32)
我有一个 sigmoid 函数的列表输出作为 PyTorch 中的张量
例如
output (type) = torch.Size([4]) tensor([0.4481, 0.4014, 0.5820, 0.2877], device='cuda:0',
在进行二元分类时,我想将所有低于 0.5 的值变为 0,将高于 0.5 的所有值变为 1。
传统上,对于 NumPy 数组,您可以使用列表迭代器:
output_prediction = [1 if x > 0.5 else 0 for x in outputs ]
这可行,但是我必须稍后将 output_prediction 转换回张量才能使用
torch.sum(ouput_prediction == labels.data)
其中 labels.data 是标签的二进制张量。
有没有办法将列表迭代器与张量一起使用?
prob = torch.tensor([0.3,0.4,0.6,0.7])
out = (prob>0.5).float()
# tensor([0.,0.,1.,1.])
说明:在pytorch中,可以直接使用prob>0.5
得到一个torch.bool
类型的tensor。然后你可以通过 .float()
.
为什么不考虑使用 loopless 解决方案?也许像下面这样的东西就足够了:
In [34]: output = torch.tensor([0.4481, 0.4014, 0.5820, 0.2877])
# subtract off the threshold value (0.5), create a boolean mask,
# and then cast the resultant tensor to an `int` type
In [35]: result = torch.as_tensor((output - 0.5) > 0, dtype=torch.int32)
In [36]: result
Out[36]: tensor([0, 0, 1, 0], dtype=torch.int32)