Skip to content
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

测试问题!!! #31

Open
gengyanlei opened this issue Aug 27, 2019 · 21 comments
Open

测试问题!!! #31

gengyanlei opened this issue Aug 27, 2019 · 21 comments

Comments

@gengyanlei
Copy link

你好:
我发现你的网络训练完成后,仅适用于特征分布适合的数据集,意思是仅适合本数据集,无法迁移,因为针对同一张图片,你的网络预测特征向量是每次都变化的,导致预测结果,每次都不一样。

@jackymoo
Copy link

jackymoo commented Sep 4, 2019

我也发现了这个问题,请问有什么解决办法吗?

@gengyanlei
Copy link
Author

@jackymoo
抱歉,我在好几个数据集上训练好的,然后测试没有发现,后面做泛化检查时,才发现,过去了3周。郁闷,才发现是变化的。这个原因应该是它的anchor机制造成的。我没有弄明白这个机制,所以也就没办法解决,感觉这种模型是最坑的,错还错的不一样。果断放弃,你可以试试其它的,只要那些在网络中完成定位实现局部特征提取的,这样测试时不会出现变化。

@jackymoo
Copy link

jackymoo commented Sep 5, 2019

恩恩,好的。感谢!

@ZF4444
Copy link

ZF4444 commented Sep 9, 2019

@gengyanlei ,你好,我最近也在看这个,我没有理解你们两的意思,同一张图片特征向量怎么会是不同的呢?那这样的话他提供的pth每个人跑的精度也会不同吧。

@gengyanlei
Copy link
Author

@ZF1044404254 ,你好,你可以直接下载他的模型,然后在CUB上测试,输出一下预测概率,可以看出每次都是变化的。

@RunshengZhu
Copy link

@gengyanlei @ZF1044404254 @jackymoo 这个是pytorch的锅,在代码里设置一下torch的随机数种子就可以保证每次输出一致了
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)

@gengyanlei
Copy link
Author

@RunshengZhu
谢谢了,我重新看一下代码,然后重新训练一下。

@gengyanlei
Copy link
Author

@RunshengZhu
你好,我检查了一下代码,没发现有随机数的使用呢!请问这个在哪里设置呢?还是将这3行代码复制在主函数最上面呢?

@RunshengZhu
Copy link

RunshengZhu commented Oct 25, 2019

@gengyanlei 代码里没有,定一个seed值比如2019,放到主函数最上面就可以了,pytorch内部函数里会有随机部分,比如bn

@gengyanlei
Copy link
Author

@RunshengZhu
seed=5
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
如果训练时不放这3行代码,测试时放到测试代码里面,我发现预测结果还是变化的,每次类别都不一样。

@gengyanlei
Copy link
Author

@RunshengZhu
针对同一张图片,反复输出结果,在代码最前面已经写了这三行代码了。结果如下:
tensor([11.4219], device='cuda:0', grad_fn=) tensor([271], device='cuda:0')
tensor([12.3799], device='cuda:0', grad_fn=) tensor([271], device='cuda:0')
tensor([12.5087], device='cuda:0', grad_fn=) tensor([271], device='cuda:0')
tensor([11.5199], device='cuda:0', grad_fn=) tensor([271], device='cuda:0')
tensor([11.6220], device='cuda:0', grad_fn=) tensor([271], device='cuda:0')
tensor([11.7060], device='cuda:0', grad_fn=) tensor([272], device='cuda:0')
tensor([11.4901], device='cuda:0', grad_fn=) tensor([272], device='cuda:0')
tensor([13.1230], device='cuda:0', grad_fn=) tensor([272], device='cuda:0')
tensor([13.0418], device='cuda:0', grad_fn=) tensor([272], device='cuda:0')
tensor([10.6846], device='cuda:0', grad_fn=) tensor([272], device='cuda:0')

@RunshengZhu
Copy link

@gengyanlei
os.environ['PYTHONHASHSEED'] = str(seed)
torch.backends.cudnn.deterministic = True
可以再加这两句试试,再有变化就不清楚了,我这里是ok的

@gengyanlei
Copy link
Author

不小心close了issue,┭┮﹏┭┮

@gengyanlei gengyanlei reopened this Oct 28, 2019
@gengyanlei
Copy link
Author

好吧,在CUB上面,如果按照你的设置,应该是不会有太大变化的;但是我的测试集和训练集有较大差距时,如果是其它模型都固定好参数了,那么预测结果也是固定的,即使效果很差;但是,这个NTS就不是这样的,我用的其它的模型也使用了cudnn了,也是同样的pytorch版本,预测结果就没有问题。

@RunshengZhu
Copy link

@gengyanlei 我用自己的数据train的model也没问题,开了cudnn结果也一样

@gengyanlei
Copy link
Author

@RunshengZhu
我这是之前训练模型,没有设置这些参数,然后测试时在前面加了你说的这几行代码,结果仍然是变化的。我无语了,我在这个数据集上训练的,在另一个数据集上测试,结果就变化。
算了,反正这个模型 资源消耗和WS-DAN 一样,都很大,被pass了。
谢谢你了。

@mo-vic
Copy link

mo-vic commented Dec 9, 2019

难道不是nn.Dropout的问题吗?

@ZF4444
Copy link

ZF4444 commented Dec 9, 2019

难道不是nn.Dropout的问题吗?

对,应该是这个问题,代码中resnet网络的代码作者在最后直接使用nn.dropout(p=0.5)(x),这回导致在测试阶段,虽然加了 net.eval(),但是dropout依然会生效,所以结果不固定

@gengyanlei
Copy link
Author

gengyanlei commented Dec 11, 2019

@mo-vic 十分感谢,没有发现这个问题。以为它使用的是pytorch的官方代码呢,没想到还做了一点改变。测试过了,发现的确如此。
如果在forward里面,使用nn.dropout 或者 F.dropout 都会导致输出结果的不一致。
建议在__init__里面创建 self.dropout = nn.Dropout()

@lunchben
Copy link

@jackymoo
抱歉,我在好几个数据集上训练好的,然后测试没有发现,后面做泛化检查时,才发现,过去了3周。郁闷,才发现是变化的。这个原因应该是它的anchor机制造成的。我没有弄明白这个机制,所以也就没办法解决,感觉这种模型是最坑的,错还错的不一样。果断放弃,你可以试试其它的,只要那些在网络中完成定位实现局部特征提取的,这样测试时不会出现变化。

你好,我在训练自己的数据集的时候出现了SyntaxError: not a TIFF file (header b'' not valid)这个错误,我的图片格式都是jpg的,并且为了方便调试代码数据集格式直接仿照CUB_200_2011的目录结构分配的,请问我哪里有问题能指点一下吗谢谢啦。

@boxyao
Copy link

boxyao commented Feb 6, 2020

对的,是Dropout的问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants