l1006986533 / unixassignment2

0 stars 0 forks source link

PHMGNNBenchmark #1

Open CXfighting opened 1 year ago

CXfighting commented 1 year ago

您好,最近在学习《The emerging graph neural networks for intelligent fault diagnostics and prognostics A guideline and a benchmark study》这篇文章,想复现时,遇到点问题,想向您请教,不知您是否方便,我得qq/vx:838700598。还请不吝赐教,谢谢。

l1006986533 commented 1 year ago

是看到我PHMGNNBenchmark中的infer吧。有什么问题就直接在这问吧,实在不方便再在qq上聊

CXfighting commented 1 year ago

您好

再次感谢您的回复,我在github上看到了您PHMGNNBenchmark中的infer,因为源作者提供的代码中没有看到test.py用于测试,我想您编写的infer应该是实现此目的的,我目前在学习故障预测这方面的知识,所以主要是想针对您编写的的infer2.py进行请教。

我看您在infer2.py中用的是FD001和GCN_EdgePool,我在训练时用的是GAT_TopKPool,在将您代码相应部分进行替换,目前已经成功运行,但是目前还有如下问题不太明白,还需向您请假。

(1)我看您加载了“train_FD001.txt”文件,这个在源作者文件中是没有的,我也是直接用您提供的,想问下,这个文件是怎么处理获得的呀,是数据里面那个“train_FD001.pkl”文件读取转换的吗。 (2)我调试您的infer2.py,输出的结果是NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.   return numba.jit(cache=True)(func) 124 有警告,但输出了res的数值是124,我不太清楚这个124的含义是什么,还请您给解答下。 (3)因为是在学习RUL,想知道是否有结果能直观的显示这个器件还可以用多长时间,是否是上面这个数值124。

给您添麻烦啦,还请您不吝赐教。

初旭 @.***

 

------------------ 原始邮件 ------------------ 发件人: "l1006986533/unixassignment2" @.>; 发送时间: 2023年11月14日(星期二) 晚上11:09 @.>; @.**@.>; 主题: Re: [l1006986533/unixassignment2] PHMGNNBenchmark (Issue #1)

是看到我PHMGNNBenchmark中的infer吧。有什么问题就直接在这问吧,实在不方便再在qq上聊

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

l1006986533 commented 1 year ago
  1. train_FD001.txt是CMAPSS数据集中的其中一个文件。至于train_FD001.pkl,那是作者将train_FD001.txt中的东西归一化了。
    
    >>> import pickle
    >>> pickle.load(open("train_FD001.pkl","rb"))
       engine_id  cycle                                               data  label
    0              1     30  [[-1.7216836648143123, -0.1342519221367484, -0...  130.0
    1              1     31  [[-1.0617539738037376, 0.21152336734058427, -0...  130.0
    2              1     32  [[-0.6617965853123012, -0.4131555754415983, -0...  130.0
    3              1     33  [[-0.6617965853123012, -1.2612836439709558, -0...  130.0
    4              1     34  [[-0.621800846463203, -1.2514975508725492, -0....  130.0
    ...          ...    ...                                                ...    ...
    17726        100    196  [[1.7779434844849613, 1.0335551876074869, 0.88...    4.0
    17727        100    197  [[0.5780713190108792, 0.47248584996502196, 1.5...    3.0
    17728        100    198  [[0.3380968859160627, 0.47248584996502196, 1.8...    2.0
    17729        100    199  [[0.05812671397214809, 0.47248584996502196, 2....    1.0
    17730        100    200  [[0.7380542744072719, 0.4953200671946375, 1.28...    0.0

[17731 rows x 4 columns]

import pandas as pd column_names=['unit_nr', 'time_cycles', 'setting_1', 'setting_2', 'setting_3', 's_1', 's_2', 's_3', 's_4', 's_5', 's_6', 's_7', 's_8', 's_9', 's_10', 's_11', 's_12', 's_13', 's_14', 's_15', 's_16', 's_17', 's_18', 's_19', 's_20', 's_21'] x=pd.read_csv("train_FD001.txt",sep='\s+',header=None,names=column_names) drop_columns=['unit_nr', 'time_cycles', 'setting_1', 'setting_2', 'setting_3', 's_1', 's_5', 's_6', 's_10', 's_16', 's_18', 's_19'] # 见论文第18页 x.drop(drop_columns, axis=1, inplace=True) x = (x - x.mean()) / x.std() print(x[:-29]) s_2 s_3 s_4 s_7 s_8 s_9 s_11 s_12 s_13 s_14 s_15 s_17 s_20 s_21 0 -1.721684 -0.134252 -0.925914 1.121113 -0.516326 -0.862792 -0.266460 0.334254 -1.058865 -0.269065 -0.603801 -0.781691 1.348460 1.194398 1 -1.061754 0.211523 -0.643710 0.431920 -0.798074 -0.958794 -0.191578 1.174871 -0.363637 -0.642829 -0.275845 -0.781691 1.016503 1.236892 2 -0.661797 -0.413156 -0.525940 1.008131 -0.234578 -0.557126 -1.015279 1.364688 -0.919819 -0.551616 -0.649128 -2.073044 0.739873 0.503411 3 -0.661797 -1.261284 -0.784812 1.222798 0.188044 -0.713808 -1.539452 1.961255 -0.224592 -0.520163 -1.971617 -0.781691 0.352590 0.777773 4 -0.621801 -1.251498 -0.301511 0.714376 -0.516326 -0.457048 -0.977838 1.052846 -0.780774 -0.521736 -0.339837 -0.136014 0.463242 1.059526 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 20597 1.777943 1.033555 0.887298 -0.957766 0.610665 0.499802 0.819327 -0.709738 1.026818 0.204301 0.657363 1.801015 -1.141216 -0.574641 20598 0.578071 0.472486 1.570585 -1.353205 1.737656 -0.105645 1.006531 -1.902872 1.443954 -0.312574 1.475920 1.155339 -1.141216 -0.251318 20599 0.338097 0.472486 1.888342 -0.901275 0.469791 0.335421 1.568145 -1.346980 0.609681 -0.188336 1.363935 1.155339 -0.587954 -0.679952 20600 0.058127 0.472486 2.082773 -1.296714 0.751539 0.280174 1.755350 -1.835081 1.304909 0.178090 1.659895 0.509662 -1.030563 -1.232372 20601 0.738054 0.495320 1.282827 -1.771240 1.315035 -0.275912 1.343500 -1.238514 1.165863 0.014535 1.769213 1.801015 -0.034693 -1.278561

[20602 rows x 14 columns]


顺带一提,作者在论文中提到的归一化方法是Min-Max归一化,但实际上是Z-score归一化。
2. 你理解的是正确的。124的确代表着RUL,即器件剩余寿命。
l1006986533 commented 1 year ago

这篇论文还有一个对不上的点。在第18页,作者说the maximum RUL of each engine is set to 125,但实际上是130

l1006986533 commented 1 year ago

最后,希望你不是浙江工业大学张元鸣老师的学生(笑) image

CXfighting commented 1 year ago

感谢您的解答。

这2个问题在您解答后,我已经明白,非常感谢,我昨天还发现了一个问题。

在源作者的CMAPSS_graph.py文件中,def data_preprare下对数据集进行了处理,划分为训练、验证和测试,但是验证集好像就是测试集的数据,在他的程序中没有看到测试程序,只是用测试集的数在验证最佳模型性能。

之后,在您提供的infer2.py中,我认为您是用最佳的模型进行测试,所以在加载数据集的时候(x=pd.read_csv)你一开始用的是训练集,我在这里改成了测试集,但是这样验证集和测试集就是一个了,这样感觉不太正确,想问下您我这么理解是否正确。这样的测试是否是正确的。

那个,我不是浙江工业大学的,我是哈工大的。

最后,再次表达感谢。

初旭 @.***

 

------------------ 原始邮件 ------------------ 发件人: "l1006986533/unixassignment2" @.>; 发送时间: 2023年11月16日(星期四) 中午11:18 @.>; @.**@.>; 主题: Re: [l1006986533/unixassignment2] PHMGNNBenchmark (Issue #1)

train_FD001.txt是CMAPSS数据集中的其中一个文件。至于train_FD001.pkl,那是作者将train_FD001.txt中的东西归一化了。 >>> import pickle >>> pickle.load(open("train_FD001.pkl","rb")) engine_id cycle data label 0 1 30 [[-1.7216836648143123, -0.1342519221367484, -0... 130.0 1 1 31 [[-1.0617539738037376, 0.21152336734058427, -0... 130.0 2 1 32 [[-0.6617965853123012, -0.4131555754415983, -0... 130.0 3 1 33 [[-0.6617965853123012, -1.2612836439709558, -0... 130.0 4 1 34 [[-0.621800846463203, -1.2514975508725492, -0.... 130.0 ... ... ... ... ... 17726 100 196 [[1.7779434844849613, 1.0335551876074869, 0.88... 4.0 17727 100 197 [[0.5780713190108792, 0.47248584996502196, 1.5... 3.0 17728 100 198 [[0.3380968859160627, 0.47248584996502196, 1.8... 2.0 17729 100 199 [[0.05812671397214809, 0.47248584996502196, 2.... 1.0 17730 100 200 [[0.7380542744072719, 0.4953200671946375, 1.28... 0.0 [17731 rows x 4 columns] >>> import pandas as pd >>> column_names=['unit_nr', 'time_cycles', 'setting_1', 'setting_2', 'setting_3', 's_1', 's_2', 's_3', 's_4', 's_5', 's_6', 's_7', 's_8', 's_9', 's_10', 's_11', 's_12', 's_13', 's_14', 's_15', 's_16', 's_17', 's_18', 's_19', 's_20', 's_21'] >>> x=pd.read_csv("train_FD001.txt",sep='\s+',header=None,names=column_names) >>> drop_columns=['unit_nr', 'time_cycles', 'setting_1', 'setting_2', 'setting_3', 's_1', 's_5', 's_6', 's_10', 's_16', 's_18', 's_19'] # 见论文第18页 >>> x.drop(drop_columns, axis=1, inplace=True) >>> x = (x - x.mean()) / x.std() >>> print(x[:-29]) s_2 s_3 s_4 s_7 s_8 s_9 s_11 s_12 s_13 s_14 s_15 s_17 s_20 s_21 0 -1.721684 -0.134252 -0.925914 1.121113 -0.516326 -0.862792 -0.266460 0.334254 -1.058865 -0.269065 -0.603801 -0.781691 1.348460 1.194398 1 -1.061754 0.211523 -0.643710 0.431920 -0.798074 -0.958794 -0.191578 1.174871 -0.363637 -0.642829 -0.275845 -0.781691 1.016503 1.236892 2 -0.661797 -0.413156 -0.525940 1.008131 -0.234578 -0.557126 -1.015279 1.364688 -0.919819 -0.551616 -0.649128 -2.073044 0.739873 0.503411 3 -0.661797 -1.261284 -0.784812 1.222798 0.188044 -0.713808 -1.539452 1.961255 -0.224592 -0.520163 -1.971617 -0.781691 0.352590 0.777773 4 -0.621801 -1.251498 -0.301511 0.714376 -0.516326 -0.457048 -0.977838 1.052846 -0.780774 -0.521736 -0.339837 -0.136014 0.463242 1.059526 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 20597 1.777943 1.033555 0.887298 -0.957766 0.610665 0.499802 0.819327 -0.709738 1.026818 0.204301 0.657363 1.801015 -1.141216 -0.574641 20598 0.578071 0.472486 1.570585 -1.353205 1.737656 -0.105645 1.006531 -1.902872 1.443954 -0.312574 1.475920 1.155339 -1.141216 -0.251318 20599 0.338097 0.472486 1.888342 -0.901275 0.469791 0.335421 1.568145 -1.346980 0.609681 -0.188336 1.363935 1.155339 -0.587954 -0.679952 20600 0.058127 0.472486 2.082773 -1.296714 0.751539 0.280174 1.755350 -1.835081 1.304909 0.178090 1.659895 0.509662 -1.030563 -1.232372 20601 0.738054 0.495320 1.282827 -1.771240 1.315035 -0.275912 1.343500 -1.238514 1.165863 0.014535 1.769213 1.801015 -0.034693 -1.278561 [20602 rows x 14 columns]
顺带一提,作者在论文中提到的归一化方法是Min-Max归一化,但实际上是Z-score归一化。

  1. 你理解的是正确的。124的确代表着RUL,即器件剩余寿命。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

l1006986533 commented 1 year ago
  1. 没错,验证集就是测试集。至于测试程序,作者写了个意义不明的utils/metrics.py,由于找不到RocAucEvaluation,这个程序其实是跑不起来的,所以就当他没有测试程序吧。 你说“def data_preprare下对数据集进行了处理,划分为训练、验证和测试”,其实它只是读取了这两个文件,没有划分。划分是在预处理阶段就做了的,不是在这个函数里。
  2. 你可以用其他的测试集。如果你在train_graph_prognosis.py中用train_FD001训练,test_FD001验证,那就用test_FD002当作测试集即可。
l1006986533 commented 1 year ago

但其实作者的程序非常垃圾,在test_FD001上表现很差。这也是我干脆直接用train_FD001作为验证集的原因:起码写论文的时候不会太难看

CXfighting commented 1 year ago

好的,明白了,太感谢了, 还是一起交流比自己一个人在那里研究强。

之后,您写的infer2.py这个程序就是用来测试的吧,如果用test_FD002作为测试的话,除了“x=pd.read_csv”要加载这个文件,下方的edge_index=torch.LongTensor,是否也要更换成“edge_index_FD002.npy”中的数据呀。

初旭 @.***

 

------------------ 原始邮件 ------------------ 发件人: "l1006986533/unixassignment2" @.>; 发送时间: 2023年11月16日(星期四) 中午12:17 @.>; @.**@.>; 主题: Re: [l1006986533/unixassignment2] PHMGNNBenchmark (Issue #1)

没错,验证集就是测试集。至于测试程序,作者写了个意义不明的utils/metrics.py,由于找不到RocAucEvaluation,这个程序其实是跑不起来的,所以就当他没有测试程序吧。 你说“def data_preprare下对数据集进行了处理,划分为训练、验证和测试”,其实它只是读取了这两个文件,没有划分。划分是在预处理阶段就做了的,不是在这个函数里。

你可以用其他的测试集。如果你在train_graph_prognosis.py中用train_FD001训练,test_FD001验证,那就用test_FD002当作测试集即可。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

l1006986533 commented 1 year ago

是这样没错。但我记得所有的edge index都是一样的?你可以自己用np.load看下。如果是一样的,就不用换了

CXfighting commented 1 year ago

好的嘞,太感谢,占用您午休时间了。我下午再研究研究,很开心与您的交流。

初旭 @.***

 

------------------ 原始邮件 ------------------ 发件人: "l1006986533/unixassignment2" @.>; 发送时间: 2023年11月16日(星期四) 中午1:03 @.>; @.**@.>; 主题: Re: [l1006986533/unixassignment2] PHMGNNBenchmark (Issue #1)

是这样没错。但我记得所有的edge index都是一样的?你可以自己用np.load看下。如果是一样的,就不用换了

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>