目录
根据不同哈希码的长度来判断最好的情况每个哈希码长度下所有样本的平均精度和召回率每个检索集样本在不同哈希码长度下的平均精度和召回率区别代码上的区别应用场景的区别两种代码对应的数据点的意义如果要绘制固定哈希码长度下检索集的表现,我们应该选用第二种代码。第一种代码的适合的使用场景
根据不同哈希码的长度来判断最好的情况
每个哈希码长度下所有样本的平均精度和召回率
def pr_curve(qB, rB, query_label, retrieval_label):
"只接受二进制码组成的0和1 或者 -1和1组成的二进制码,请把所有标签进行onehot编码"
qB[qB==-1] = 0 ; rB[rB==-1] = 0 # 根据你哈希码长度来改变数值将
num_query = qB.shape[0]
num_bit = qB.shape[1]
P = torch.zeros(num_query, num_bit+1)
R = torch.zeros(num_query, num_bit+1)
for i in range(num_query):
gnd = (query_label[i].unsqueeze(0).mm(retrieval_label.t()) > 0).float().squeeze()
print('gnd size is ' + str(gnd.shape))
'''对于一个(num,4)与(4,num)大小的矩阵相乘最后得到是(num,num)大小的矩阵,他会展示标签之间是否相同'''
# 这里的groudtruth标签大小是(retrieval_label,)
tsum = torch.sum(gnd) # 一共有多少个相同的标签(事实上的,没有固定检索哈希码的长度)
if tsum == 0:
continue # 如果没有相似的也没必要继续进行了
hamm = calc_hamming_dist(qB[i, :], rB) # 汉明距离
print('hamming distance is '+str(hamm.shape))
tmp = (hamm |