在我的测试数据集中,我必须始终在每批中包含一个特定图像(位置 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 中是否有一种方法可以生成跳过一个特定值的随机数。或者,如果您认为另一种方法会更好,请发表评论。
答案 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))
第二种方法更加通用,因为您可以在初始声明和替换中使用您想要的任何值。