Antimony5292/FairNeuron

Some errors when running the code

Opened this issue · 32 comments

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

感谢反馈,应该是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.

您好,关于您的代码我有几个问题。
第一,您在定义模型的时候,使用了一个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
这些就是我的所有问题,期待您的解答。

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

您好,关于您的代码我有几个问题。 第一,您在定义模型的时候,使用了一个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. 感谢指正,已修复。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在分析代码时,我发现了一些令我困惑的地方。在 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次重复实验。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我更改的是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用的。

我更改的是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吗?

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

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

您好,为了排除环境的影响,我拉取了一个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. 实验时的确是不固定种子随机取的。

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

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

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

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

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

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

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呀?

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我服务器不好跑