Pytorch 随机张量生成,具有一个固定值和其余随机值

时间:2021-03-23 01:45:14

标签: python random pytorch tensor

在我的测试数据集中,我必须始终在每批中包含一个特定图像(位置 0 处的图像),但可以随机选择其他值。所以我正在制作一个张量,它的第一个值是 0(对于第一个图像),其余的可以是 0 以外的任何值。我的代码片段如下。

a= torch.randperm(len(l-1)) #where l is total no of testing image in dataset, code output->tensor([10, 0, 1, 2, 4, 5])
b=torch.tensor([0]) # code output-> tensor([0])
c=torch.cat((b.view(1),a))# gives output as -> tensor([0, 10, 0, 1, 2, 4, 5]) and 0 is used twice so repeated test image

但是,上述方法可以包含 0 两次,而 torch.randperm 多次包含 0。torch 中是否有一种方法可以生成跳过一个特定值的随机数。或者,如果您认为另一种方法会更好,请发表评论。

1 个答案:

答案 0 :(得分:0)

您可以使用条件索引删除这些 0(也假设您的意思是 len(l) - 1):

a= torch.randperm(len(l)-1) #where l is total no of testing image in dataset, code output->tensor([10, 0, 1, 2, 4, 5])
a=a[a!=0]
b=torch.tensor([0]) # code output-> tensor([0])
c=torch.cat((b,a))# gives output as -> tensor([0, 10, 0, 1, 2, 4, 5]) and 0 is used twice so repeated test image

或者,如果您想确保它永远不会被放入:

a=torch.arange(1,len(l)) 
a=a[torch.randperm(a.shape[0])]
b=torch.tensor([0]) 
c=torch.cat((b,a))

第二种方法更加通用,因为您可以在初始声明和替换中使用您想要的任何值。