在看一个算法的代码实现中,我在分析一行代码的时候,有点不知道为什么这么写:
model_1.module.classifier.weight.data.copy_(torch.from_numpy(normalize(km.cluster_centers_, axis=1)).float().cuda())
km.cluster_centers,是聚类后的各个类的中心,将这些中心标准化以后直接赋值到了线性层的参数中,一直没能理解为什么这么做,后来有一点想明白了。
我们假设一个线性层的输入特征是M维的,输出是N维的,如果不加思考的化,就是一个M维到N维的转换。但是深入一点的思考的化,其实可以将其理解为:将M维的向量,与N个M维的向量(Normalize后则是单位向量)做内积,生成了N个内积,内积i代表着输入特征在第i个向量上的投影,这个值越大,代表着输入向量与这个向量的关系越紧密。