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

Some errors when running the code #1

Open
junjie1003 opened this issue Jul 5, 2022 · 32 comments
Open

Some errors when running the code #1

junjie1003 opened this issue Jul 5, 2022 · 32 comments

Comments

@junjie1003
Copy link

您好,我运行您的代码时,我在确定我服务器显卡显存充足,而且batchsize调很低的情况下,仍然无法成功运行 python run.py,报错信息如下:
01
02
03
04
请问这个问题怎么解决呀?

@Antimony5292
Copy link
Owner

感谢反馈,应该是tensor clone的时候没有detach导致生成图也被保存的问题。目前占用显存应该不大于2GB。

Thank you for your feedback, it looks like tensor should be detached before append in a list. Now its GPU memory overhead should not greater than 2GB.

@junzhouye
Copy link

junzhouye commented Jul 6, 2022

您好,关于您的代码我有几个问题。
第一,您在定义模型的时候,使用了一个GradientReversal(grl_lambda),这部分是有什么作用呢?额外的一个输出s是作为性别的分类网络是吗,为什么要专门这么设计,在论文中似乎没有提到这一点。
image
第二,在训练网络的时候,一开始训练的一个网络的函数如下,它的传参是grl_lambda=0
image
但是在这个函数的内部,可以看到
image
所以这个时候使用的grl_lambda是多少呢?
第三,在Fixate_with_val()这个函数里面,我观察到,您是没有将网络传参进去的,也就是每次修复都是使用一个随机的网络开始,是这样的吗?而且这个时候grl_lambda是0,内部的grl_lambda=50也是被注释掉的,所以这时候使用的是正常网络?
image
第四,提出一个疑问,您对dropout的时候用是使用F.dropout(),且在forward中使用。https://zhuanlan.zhihu.com/p/523483498 ,根据这个帖子,model.train()和model.eval()并不能控制dropout,因为这是一个函数。
image
这些就是我的所有问题,期待您的解答。

@junjie1003
Copy link
Author

您好,我想问一下在运行demo时,--input-path在census和credit数据集上应该是啥呀,另外GitHub上的结果是多少轮的结果呀?我目前跑COMPAS结果成功运行后与GitHub的readme上的结果有不小差距。

@Antimony5292
Copy link
Owner

您好,关于您的代码我有几个问题。 第一,您在定义模型的时候,使用了一个GradientReversal(grl_lambda),这部分是有什么作用呢?额外的一个输出s是作为性别的分类网络是吗,为什么要专门这么设计,在论文中似乎没有提到这一点。 image 第二,在训练网络的时候,一开始训练的一个网络的函数如下,它的传参是grl_lambda=0 image 但是在这个函数的内部,可以看到 image 所以这个时候使用的grl_lambda是多少呢? 第三,在Fixate_with_val()这个函数里面,我观察到,您是没有将网络传参进去的,也就是每次修复都是使用一个随机的网络开始,是这样的吗?而且这个时候grl_lambda是0,内部的grl_lambda=50也是被注释掉的,所以这时候使用的是正常网络? image 第四,提出一个疑问,您对dropout的时候用是使用F.dropout(),且在forward中使用。https://zhuanlan.zhihu.com/p/523483498 ,根据这个帖子,model.train()和model.eval()并不能控制dropout,因为这是一个函数。 image 这些就是我的所有问题,期待您的解答。

感谢您的反馈。

  1. 这个是为了与FADEA的setup保持一致。
  2. 感谢指正,此处应该使用的值是50,已修复。
  3. Fixate_with_val()的参数列表为(net,data_class,epoch,dataset,BATCH_SIZE),其中的net即为传入的网络。该函数是为了获取样本分类的最优参数,故使用的是不含GRL的网络。
  4. 感谢指正,已修复。

@Antimony5292
Copy link
Owner

您好,我想问一下在运行demo时,--input-path在census和credit数据集上应该是啥呀,另外GitHub上的结果是多少轮的结果呀?我目前跑COMPAS结果成功运行后与GitHub的readme上的结果有不小差距。

  1. 应该为../data/Census/adult../data/Credit/german_credit
  2. 10轮。参数选择有一定随机性,结果方差可能较大。

@junjie1003
Copy link
Author

您好,请问我在credit上进行实验时出现了这个问题,似乎是因为算式中有NaN这些数,这个问题如何解决呀?
Pro1
Pro2
Pro3

@junjie1003
Copy link
Author

在分析代码时,我发现了一些令我困惑的地方。在 data/results 目录下存在名为 census_res.csv 的文件,文件里的结果为:
01
我自己进行几组实验取平均值的结果为:
02
我发现和这个 csv 里的结果很接近,但是都与论文中的结果有不小差距:
03
尤其是在 DPR 上,按照论文中的公式计算,DPR 应该比较接近 1 才合理,这是我比较困惑的地方。请问随机性的影响会有这么大吗?我重复了3次实验。

@Antimony5292
Copy link
Owner

Antimony5292 commented Jul 11, 2022

在分析代码时,我发现了一些令我困惑的地方。在 data/results 目录下存在名为 census_res.csv 的文件,文件里的结果为: 01 我自己进行几组实验取平均值的结果为: 02 我发现和这个 csv 里的结果很接近,但是都与论文中的结果有不小差距: 03 尤其是在 DPR 上,按照论文中的公式计算,DPR 应该比较接近 1 才合理,这是我比较困惑的地方。请问随机性的影响会有这么大吗?我重复了3次实验。

您好,
1、这个文件是测试其他算法的结果,FN结果的命名是
image
的格式。
2、10轮迭代的随机性的确比较大,您可以尝试跑50或者100轮观察一下DPR的波动情况。

@Antimony5292
Copy link
Owner

您好,请问我在credit上进行实验时出现了这个问题,似乎是因为算式中有NaN这些数,这个问题如何解决呀? Pro1 Pro2 Pro3

error的原因是credit数据集比较小,用来做参数选择的子集更小,里面某些参数选择会导致根本选不出异常样本来,得到一个空loader,后续工作自然无法完成,是正常情况,不影响选择到正确参数的。

@junjie1003
Copy link
Author

在分析代码时,我发现了一些令我困惑的地方。在 data/results 目录下存在名为 census_res.csv 的文件,文件里的结果为: 01 我自己进行几组实验取平均值的结果为: 02 我发现和这个 csv 里的结果很接近,但是都与论文中的结果有不小差距: 03 尤其是在 DPR 上,按照论文中的公式计算,DPR 应该比较接近 1 才合理,这是我比较困惑的地方。请问随机性的影响会有这么大吗?我重复了3次实验。

您好, 1、这个文件是测试其他算法的结果,FN结果的命名是 image 的格式。 2、10轮迭代的随机性的确比较大,您可以尝试跑50或者100轮观察一下DPR的波动情况。

您好,请问在你们实验过程中具体是进行了多少轮迭代呀?我记得之前您回复我说跑出GitHub上的结果是10轮,但是我进行了几次10轮的迭代结果都不合适,感觉我如果盲目地增加迭代次数会比较浪费时间,我目前的目标只是复现出论文里的结果,抱歉再次打扰您。

@junjie1003
Copy link
Author

您好,请问我在credit上进行实验时出现了这个问题,似乎是因为算式中有NaN这些数,这个问题如何解决呀? Pro1 Pro2 Pro3

error的原因是credit数据集比较小,用来做参数选择的子集更小,里面某些参数选择会导致根本选不出异常样本来,得到一个空loader,后续工作自然无法完成,是正常情况,不影响选择到正确参数的。

但是我刚刚尝试时发现,最后运行结束后没有输出目录,因为是异常退出,所以我看不到各项指标,这种情况请问应该怎么解决呀?

@Antimony5292
Copy link
Owner

您好,请问我在credit上进行实验时出现了这个问题,似乎是因为算式中有NaN这些数,这个问题如何解决呀? Pro1 Pro2 Pro3

error的原因是credit数据集比较小,用来做参数选择的子集更小,里面某些参数选择会导致根本选不出异常样本来,得到一个空loader,后续工作自然无法完成,是正常情况,不影响选择到正确参数的。

但是我刚刚尝试时发现,最后运行结束后没有输出目录,因为是异常退出,所以我看不到各项指标,这种情况请问应该怎么解决呀?

的确有可能遇到数据集划分导致loss全为NaN的情况,已修复。

@Antimony5292
Copy link
Owner

在分析代码时,我发现了一些令我困惑的地方。在 data/results 目录下存在名为 census_res.csv 的文件,文件里的结果为: 01 我自己进行几组实验取平均值的结果为: 02 我发现和这个 csv 里的结果很接近,但是都与论文中的结果有不小差距: 03 尤其是在 DPR 上,按照论文中的公式计算,DPR 应该比较接近 1 才合理,这是我比较困惑的地方。请问随机性的影响会有这么大吗?我重复了3次实验。

您好, 1、这个文件是测试其他算法的结果,FN结果的命名是 image 的格式。 2、10轮迭代的随机性的确比较大,您可以尝试跑50或者100轮观察一下DPR的波动情况。

您好,请问在你们实验过程中具体是进行了多少轮迭代呀?我记得之前您回复我说跑出GitHub上的结果是10轮,但是我进行了几次10轮的迭代结果都不合适,感觉我如果盲目地增加迭代次数会比较浪费时间,我目前的目标只是复现出论文里的结果,抱歉再次打扰您。

是10轮,每种setup进行10次重复实验。

@junjie1003
Copy link
Author

您好,请问我在credit上进行实验时出现了这个问题,似乎是因为算式中有NaN这些数,这个问题如何解决呀? Pro1 Pro2 Pro3

error的原因是credit数据集比较小,用来做参数选择的子集更小,里面某些参数选择会导致根本选不出异常样本来,得到一个空loader,后续工作自然无法完成,是正常情况,不影响选择到正确参数的。

但是我刚刚尝试时发现,最后运行结束后没有输出目录,因为是异常退出,所以我看不到各项指标,这种情况请问应该怎么解决呀?

的确有可能遇到数据集划分导致loss全为NaN的情况,已修复。

您好,请问我用修复后的代码跑仍然存在下面的问题,我之前跑成功了COMPAS数据集上的实验现在再在COMPAS上跑也失败了,这应该如何解决呀?
微信截图_20220712221225

@Antimony5292
Copy link
Owner

您好,请问我在credit上进行实验时出现了这个问题,似乎是因为算式中有NaN这些数,这个问题如何解决呀? Pro1 Pro2 Pro3

error的原因是credit数据集比较小,用来做参数选择的子集更小,里面某些参数选择会导致根本选不出异常样本来,得到一个空loader,后续工作自然无法完成,是正常情况,不影响选择到正确参数的。

但是我刚刚尝试时发现,最后运行结束后没有输出目录,因为是异常退出,所以我看不到各项指标,这种情况请问应该怎么解决呀?

的确有可能遇到数据集划分导致loss全为NaN的情况,已修复。

您好,请问我用修复后的代码跑仍然存在下面的问题,我之前跑成功了COMPAS数据集上的实验现在再在COMPAS上跑也失败了,这应该如何解决呀? 微信截图_20220712221225

这个的原因和credit一样,我增加了这种划分情况下的判断分支,现在应该没问题了。

很抱歉当时封装这个Toolkit的时候时间匆忙未经过重复测试给您带来的困扰,我把原始实验用的ipynb文件上传到根目录了,您可以当作参考。

@junjie1003
Copy link
Author

我刚刚尝试了运行 python run.py 还是会报上面的错,然后运行 notebook 也出现下面的问题:
01
请问会不会还有啥地方需要改呀?或者有训练好的模型可以直接拿来用吗?
非常抱歉一直打扰您,我是马上研究生入学的领域新生,不是特别了解 fairness,我觉得您这篇工作特别好,希望能复现作为 baseline,再次抱歉频繁地打扰您!

@Antimony5292
Copy link
Owner

我刚刚尝试了运行 python run.py 还是会报上面的错,然后运行 notebook 也出现下面的问题: 01 请问会不会还有啥地方需要改呀?或者有训练好的模型可以直接拿来用吗? 非常抱歉一直打扰您,我是马上研究生入学的领域新生,不是特别了解 fairness,我觉得您这篇工作特别好,希望能复现作为 baseline,再次抱歉频繁地打扰您!

我这边多次测试都没有遇到问题,可能是随机划分数据集的问题,您要不试试固定一个随机数种子,如果出了问题提供一下我好复现。

@junjie1003
Copy link
Author

我刚刚尝试了运行 python run.py 还是会报上面的错,然后运行 notebook 也出现下面的问题: 01 请问会不会还有啥地方需要改呀?或者有训练好的模型可以直接拿来用吗? 非常抱歉一直打扰您,我是马上研究生入学的领域新生,不是特别了解 fairness,我觉得您这篇工作特别好,希望能复现作为 baseline,再次抱歉频繁地打扰您!

我这边多次测试都没有遇到问题,可能是随机划分数据集的问题,您要不试试固定一个随机数种子,如果出了问题提供一下我好复现。

请问你有这部分实验的docker镜像吗?我这边torch固定随机数种子还是有问题,我检查了环境没发现啥问题,现在也是比较懵

@Antimony5292
Copy link
Owner

我刚刚尝试了运行 python run.py 还是会报上面的错,然后运行 notebook 也出现下面的问题: 01 请问会不会还有啥地方需要改呀?或者有训练好的模型可以直接拿来用吗? 非常抱歉一直打扰您,我是马上研究生入学的领域新生,不是特别了解 fairness,我觉得您这篇工作特别好,希望能复现作为 baseline,再次抱歉频繁地打扰您!

我这边多次测试都没有遇到问题,可能是随机划分数据集的问题,您要不试试固定一个随机数种子,如果出了问题提供一下我好复现。

请问你有这部分实验的docker镜像吗?我这边torch固定随机数种子还是有问题,我检查了环境没发现啥问题,现在也是比较懵

您能否提供一下固定的随机数种子?我试验一下是程序的问题还是您环境的问题。

@junjie1003
Copy link
Author

我更改的是Evaluate.py文件下的torch.manual_seed(),我把种子值由0改为2022,我直接python run.py有问题,但是我尝试在notebook中试的时候,对于这个cell:
02
运行结果如下:
01
这样是算运行成功吗?但是我看这个notebook后面有一些地方不太理解,比如下面这里:
03
这里是在画图分析EO这个指标吗?这里注释掉legend是什么原因?
还有这里:
04
为什么关于path_stat的定义在后面?

@junjie1003
Copy link
Author

我刚刚尝试了运行 python run.py 还是会报上面的错,然后运行 notebook 也出现下面的问题: 01 请问会不会还有啥地方需要改呀?或者有训练好的模型可以直接拿来用吗? 非常抱歉一直打扰您,我是马上研究生入学的领域新生,不是特别了解 fairness,我觉得您这篇工作特别好,希望能复现作为 baseline,再次抱歉频繁地打扰您!

我这边多次测试都没有遇到问题,可能是随机划分数据集的问题,您要不试试固定一个随机数种子,如果出了问题提供一下我好复现。

请问你有这部分实验的docker镜像吗?我这边torch固定随机数种子还是有问题,我检查了环境没发现啥问题,现在也是比较懵

您能否提供一下固定的随机数种子?我试验一下是程序的问题还是您环境的问题。

另外请问这个notebook中对于compas数据集有多次运行,这是为什么呀?

@junjie1003
Copy link
Author

您好,请问您测试出来的结果和论文里一样吗?有中间结果能让我参考一下吗?另外您的随机种子这些参数都是固定成啥呀?是在代码那里固定吗?我其实希望能和您论文里的结果的参数设置尽量保持一致去复现。

@Antimony5292
Copy link
Owner

我更改的是Evaluate.py文件下的torch.manual_seed(),我把种子值由0改为2022,我直接python run.py有问题,但是我尝试在notebook中试的时候,对于这个cell: 02 运行结果如下: 01 这样是算运行成功吗?但是我看这个notebook后面有一些地方不太理解,比如下面这里: 03 这里是在画图分析EO这个指标吗?这里注释掉legend是什么原因? 还有这里: 04 为什么关于path_stat的定义在后面?

您好,

  1. 我测试了一下2022这个种子,并没有报错,您是否拉取了最新分支?
  2. 画图部分是为了论文作图方便,很多图用的同一个legend。
  3. 正常运行时并不固定随机种子这些参数,这是为了debug用的。

@junjie1003
Copy link
Author

我更改的是Evaluate.py文件下的torch.manual_seed(),我把种子值由0改为2022,我直接python run.py有问题,但是我尝试在notebook中试的时候,对于这个cell: 02 运行结果如下: 01 这样是算运行成功吗?但是我看这个notebook后面有一些地方不太理解,比如下面这里: 03 这里是在画图分析EO这个指标吗?这里注释掉legend是什么原因? 还有这里: 04 为什么关于path_stat的定义在后面?

您好,

  1. 我测试了一下2022这个种子,并没有报错,您是否拉取了最新分支?
  2. 画图部分是为了论文作图方便,很多图用的同一个legend。
  3. 正常运行时并不固定随机种子这些参数,这是为了debug用的。

我拉取了最新分支,就是7天前的最新版,您是直接运行的run.py吗?

@junjie1003
Copy link
Author

您好,为了排除环境的影响,我拉取了一个cuda的docker配好了环境确认无误后运行了数次,目前compas和census运行没有报错,结果取平均后如下图所示:
01
这个结果和您论文里的结果还是有不小差距,我感觉随机的影响不应该有这么大。我不知道怎么让这个结果和论文里的结果尽可能靠近(在保持例如epoch这些超参数设置一样的前提下),这也是我目前最核心的问题诉求。
另外credit我尝试0和2022都不成功,而且失败原因还不一样,种子值为2022的结果如下:
02
您说种子正常运行不固定,那不固定的话具体实验时是随机取吗?另外这个credit的问题应该如何解决呀?

@junjie1003
Copy link
Author

我又尝试了种子值2021,credit跑出来了,在3种数据集下结果如下:
03
但是只是非常随便得更换种子值就会有的种子值跑得出结果,有的报错,这个随机性感觉很大,另外这个结果感觉和论文在Acc上相近,在DP和DPR上(尤其是DPR上)差距过大了,这个没有啥解决方法吗?

@Antimony5292
Copy link
Owner

您好,为了排除环境的影响,我拉取了一个cuda的docker配好了环境确认无误后运行了数次,目前compas和census运行没有报错,结果取平均后如下图所示: 01 这个结果和您论文里的结果还是有不小差距,我感觉随机的影响不应该有这么大。我不知道怎么让这个结果和论文里的结果尽可能靠近(在保持例如epoch这些超参数设置一样的前提下),这也是我目前最核心的问题诉求。 另外credit我尝试0和2022都不成功,而且失败原因还不一样,种子值为2022的结果如下: 02 您说种子正常运行不固定,那不固定的话具体实验时是随机取吗?另外这个credit的问题应该如何解决呀?

您好,

  1. 作为修复算法,结果的评估方法并非取平均,而是10次运行中取最好的一次,因为修复是可以多次进行的,也是为了与baseline即ethical adversarial保持一致。
  2. 我这边取这些种子值都是可以运行的,但是看截图应该还是loss值为NaN的问题。您看下您那边FairNeuron.py文件里是否有math.isnan()函数,如果有的话您可以看下是DP、EO哪一项变成NaN了。
  3. 实验时的确是不固定种子随机取的。

@junjie1003
Copy link
Author

01
我看到FairNeuron.py里面的确有math.isnan()函数,那有的种子值无法运行的问题应该如何解决呀?为什么在您那没有变成NaN在我这变成了NaN?另外我观察到好像代码Evaluate.py里随机种子是人工输入一个值而不是取范围内随机数,请问您实验室用过的所有的种子还有保存吗?

@Antimony5292
Copy link
Owner

01 我看到FairNeuron.py里面的确有math.isnan()函数,那有的种子值无法运行的问题应该如何解决呀?为什么在您那没有变成NaN在我这变成了NaN?另外我观察到好像代码Evaluate.py里随机种子是人工输入一个值而不是取范围内随机数,请问您实验室用过的所有的种子还有保存吗?

  1. 您可以尝试下print DP和EO看看哪个变成NaN了?按理来说这两个不应该会是NaN,DPR因为有除法所以可能会NaN。
  2. 跑实验的时候并没有固定任何随机种子,所以也没法保存。

@junjie1003
Copy link
Author

01 我看到FairNeuron.py里面的确有math.isnan()函数,那有的种子值无法运行的问题应该如何解决呀?为什么在您那没有变成NaN在我这变成了NaN?另外我观察到好像代码Evaluate.py里随机种子是人工输入一个值而不是取范围内随机数,请问您实验室用过的所有的种子还有保存吗?

  1. 您可以尝试下print DP和EO看看哪个变成NaN了?按理来说这两个不应该会是NaN,DPR因为有除法所以可能会NaN。
  2. 跑实验的时候并没有固定任何随机种子,所以也没法保存。

我采用[0,10000)区间内随机整数作为随机种子做了几组实验,感觉DP和DPR好像怎么试都和论文里结果差距过大,这个是正常的吗?
01
02

@Antimony5292
Copy link
Owner

01 我看到FairNeuron.py里面的确有math.isnan()函数,那有的种子值无法运行的问题应该如何解决呀?为什么在您那没有变成NaN在我这变成了NaN?另外我观察到好像代码Evaluate.py里随机种子是人工输入一个值而不是取范围内随机数,请问您实验室用过的所有的种子还有保存吗?

  1. 您可以尝试下print DP和EO看看哪个变成NaN了?按理来说这两个不应该会是NaN,DPR因为有除法所以可能会NaN。
  2. 跑实验的时候并没有固定任何随机种子,所以也没法保存。

我采用[0,10000)区间内随机整数作为随机种子做了几组实验,感觉DP和DPR好像怎么试都和论文里结果差距过大,这个是正常的吗? 01 02

的确不太正常,请问这个结果您是用run.py运行得到的还是ipynb呀?

@junjie1003
Copy link
Author

01 我看到FairNeuron.py里面的确有math.isnan()函数,那有的种子值无法运行的问题应该如何解决呀?为什么在您那没有变成NaN在我这变成了NaN?另外我观察到好像代码Evaluate.py里随机种子是人工输入一个值而不是取范围内随机数,请问您实验室用过的所有的种子还有保存吗?

  1. 您可以尝试下print DP和EO看看哪个变成NaN了?按理来说这两个不应该会是NaN,DPR因为有除法所以可能会NaN。
  2. 跑实验的时候并没有固定任何随机种子,所以也没法保存。

我采用[0,10000)区间内随机整数作为随机种子做了几组实验,感觉DP和DPR好像怎么试都和论文里结果差距过大,这个是正常的吗? 01 02

的确不太正常,请问这个结果您是用run.py运行得到的还是ipynb呀?

我用run.py运行得到的,ipynb我服务器不好跑

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

3 participants