python 带Tensor的PyTorch [如果x>0.5则为1,否则输出中x为0]

r6hnlfcb  于 2023-01-19  发布在  Python
关注(0)|答案(3)|浏览(592)

我在PyTorch中列出了S形函数作为Tensor的输出
例如

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转换回Tensor才能使用

torch.sum(ouput_prediction == labels.data)

其中labels.data是标签的二元Tensor。
有没有办法把列表迭代器和Tensor一起使用?

t40tm48m

t40tm48m1#

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()转换为浮点类型。

zazmityj

zazmityj2#

为什么不考虑使用一个 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)
zte4gxcn

zte4gxcn3#

result =torch.as_tensor((output - 0.5)〉0,dtype=torch.int32),将require_grad设置为False。
〉m = Torch .nn. S形()
〉损失=标准(m(产出),目标)

相关问题