-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
好像有一个bug? #20
Comments
感谢您的细心指正。 (1)在TapNet原文中,采用的是cupy.linalg库中的svd,在该svd中,u * s * v = svd(A),返回的v其实是转置之后的结果,因此它的基向量是行向量。而在PyTorch库中的svd中,u * s * v^T = svd(A),其返回的仍是v,但是与cupy.linalg中svd返回的v不同,它未经过转置,因此它的列向量才是基向量。十分抱歉,未能察觉到这两个库实现的差异。 (2)在修正之后,我们进行了一个初步的实验。correct_svd的实验结果相比于当前会有所降低。虽然TapNet不是我们文章的核心贡献,但是这是一个有趣的现象,也是一个值得去探索的点。 (3)我们创建了一个correct_svd分支,并将修正后的代码同步到该分支里了,也欢迎您继续指正。 |
我在一些数据集上测试了TapNet, 比如FewRel,发现它并没有什么用,甚至会造成结果下降,而且个人感觉TapNet本身的思想就有点奇怪。也许是自己认识不足吧。thx |
我个人感觉你的个人感觉可能很有道理233 |
我好像发现了一个bug
这里好像不应该用一个transpose,因为SVD分解出来的vh=B x emb_dim x emb_dim,(
_, s, vh = torch.svd(error_every_class, some=False
), 每一个batch,其实它的列向量才是空间的基, 你这里好像把行向量作为空间的基了,这样求得的M,最后拿来投影error时(测试M能否把error投影到新空间中的0)assert (torch.matmul(error_every_class, M) > 1E-6).sum().item() == 0
时会报错,如果把转置去掉就不会了
The text was updated successfully, but these errors were encountered: