zjuwss / gnnwr

A PyTorch implementation of the Geographically Neural Network Weighted Regression (GNNWR)
GNU General Public License v3.0
51 stars 6 forks source link

0.15的版本的代码有问题 #2

Closed Mitchell-rmb closed 8 months ago

Mitchell-rmb commented 8 months ago

0.15新版本的代码,运行案例时,AICc和AIc的值都是负数,运行结果预测值全部是小数与结果偏差极大 save方法中x_scale_info 部分,正确地遍历了self.x_scale_info 并将其转换为列表但是在 y_scale_info 部分没有执行相同的操作,导致生成的JSon文件里y_scale_info是空值,需要修改 调用load_datase时源代码中read方法,注释掉了几行有用的部分,需要解开注释 此外gnnwr.result()这一方法会报错,张量运行在两个设备上

Mitchell-rmb commented 8 months ago

0.14版本的代码也可以正常运行,但是pip下载的0.15版本的代码,就会出现上述错误,0.15自行修改错误可以正常运行之后,预测结果出现极大偏差,删除重新安装0.15依旧会报错,但是同样的代码,其他几个版本我除了下载源码进行覆盖以外,没有进行其他操作,只是把写好的文件再次运行,就可以成功而且结果准确

Mitchell-rmb commented 8 months ago

`import os import sys sys.path.append(os.path.abspath(os.path.join(os.getcwd(), os.pardir))) from gnnwr import models,datasets,utils import pandas as pd import numpy as np import folium from folium.plugins import HeatMap, MarkerCluster from demo_utils import marker_map,Heatmap import torch.nn as nn from sklearn.metrics import r2_score as r2 import matplotlib.pyplot as plt

data = pd.read_csv(u'C:/Users/lenovo/Desktop/gnnwr-0.1.5/data/pm25_data.csv')

train_dataset, val_dataset, test_dataset = datasets.init_dataset(data=data, test_ratio=0.15, valid_ratio=0.15, x_column=['dem', 'w10','d10','t2m','aod_sat','tp'], y_column=['PM2_5'], spatial_column=['经度','纬度'], sample_seed=23, batch_size=64)

gnnwr = models.GNNWR(train_dataset = train_dataset, valid_dataset = val_dataset, test_dataset = test_dataset, dense_layers = [512, 256, 128], start_lr = 0.2, optimizer = "Adadelta", activate_func = nn.PReLU(init=0.1), model_name = " ceshi_GNNWR_PM25", model_save_path = "./ceshi/textresult", log_path = "./ceshi/textresult/gnnwr_logs", write_path = "./ceshi/textresult/gnnwr_runs" )

gnnwr.result()

gnnwr.reg_result('./ceshi/textresult/GNNWR_PM25_Result.csv')

train_dataset.save('./ceshi/textresult/gnnwr_datasets/train_dataset') val_dataset.save('./ceshi/textresult/gnnwr_datasets/val_dataset') test_dataset.save('./ceshi/textresult/gnnwr_datasets/test_dataset')

train_dataset_load=datasets.load_dataset('./ceshi/textresult/gnnwr_datasets/train_dataset/') val_dataset_load=datasets.load_dataset('./ceshi/textresult/gnnwr_datasets/val_dataset/') test_dataset_load=datasets.load_dataset('./ceshi/textresult/gnnwr_datasets/test_dataset/')

gnnwr2 = models.GNNWR(train_dataset = train_dataset_load, valid_dataset = val_dataset_load, test_dataset = test_dataset_load, dense_layers = [512, 256, 128], start_lr = 0.2, optimizer = "Adadelta", activate_func = nn.PReLU(init=0.1), model_name = " ceshi_GNNWR_PM25", model_save_path = "./ceshi/textresult", log_path = "./ceshi/textresult/gnnwr_logs", write_path = "./ceshi/textresult/gnnwr_runs" ) gnnwr2.load_model('./ceshi/textresult/ ceshi_GNNWR_PM25.pkl') gnnwr2.result()

----------------------------------------------------------------------

以上为GWNNR的一整套建模,保存,查看模型训练结果的方法

以下是预测对比及可视化方法

----------------------------------------------------------------------

导入预测数据csv文件

pred_data = pd.read_csv(u'C:/Users/lenovo/Desktop/gnnwr-0.1.5/data/pm25_predict_data.csv')

初始化预测数据集

pred_dataset = datasets.init_predict_dataset(data = pred_data,train_dataset = train_dataset,x_column=['dem', 'w10','d10','t2m','aod_sat','tp'],spatial_column=['经度','纬度']) res = gnnwr.predict(pred_dataset) res.to_csv('./ceshi/textresult/gnnwr_datasets/predict_dataset.csv', index=False) `

yorktownting commented 8 months ago

0.1.5版本存在由于学习率调整的默认参数被设置错误而导致相关问题 我们正在对各种计算设备场景下的模型运行进行统一调整和优化,包括GPU和CPU混合使用的场景和多GPU的场景 我们会尽快发布0.1.6版本以修正这些问题,PyPI的0.1.5版本已被Yank,可以暂时回退到0.1.4版本使用🙏

Mitchell-rmb commented 8 months ago

0.1.5版本存在由于学习率调整的默认参数被设置错误而导致相关问题 我们正在对各种计算设备场景下的模型运行进行统一调整和优化,包括GPU和CPU混合使用的场景和多GPU的场景 我们会尽快发布0.1.6版本以修正这些问题,PyPI的0.1.5版本已被Yank,可以暂时回退到0.1.4版本使用🙏

好滴蟹蟹您,可以请教一下关于GTNNWR模型有关于时间参数数据的问题吗,我不是很清楚我在初始化数据集时,我的数据集里有关于时间参数的这一列,我该放入的数据类型有什么要求吗?比如说这一列数据是2023年5月的某一点位的数据,或者是说某一天的数据,需要做什么处理吗?写成202305是可以的吗?或者说定义三列?即temp_column=['year,month,day']这样的输入,我确实是没有太理解GTNNWR时间这一列数据是如何处理的

yorktownting commented 8 months ago

我们已经发布了0.1.6版,请升级软件包并重试程序。 对于 TIME 参数,输入数据列应是整数,这意味着您可能需要将日期时间序列化。 例如,您有2023年5月的切片,您可以使用具体的日期作为时间列。 或者,如果您有2000年至2010年的月度数据,并希望探索月际模式,那么您可以使用月份作为时间列,此时可以将2000年1月标记为1,2001年1月标记为13。 希望对您有所帮助。

Mitchell-rmb commented 8 months ago

您好,我安装了0.16版本的gnnwr包,但是为什么我运行时,AIcc的值是负数呢,这个现象正常吗?

Mitchell-rmb commented 8 months ago

您好,我安装了0.16版本的gnnwr包,但是为什么我运行时,AIcc的值是负数呢,这个现象正常吗?

image

Mitchell-rmb commented 8 months ago

此外我在运行GTNNWR模型时,使用案例数据和代码,AICC的值也是负数,而且R²的值很低,和教程demo_gtnnwr.ipynb中的结果不符

image

Mitchell-rmb commented 8 months ago

0.14版本未出现,但0.15,0.16都有Aicc为负值的问题

yorktownting commented 8 months ago

gnnwr模型需要足够的Epoch进行训练,在训练未充分的情况下(比如400个Epoch),出现负值的AIC是正常的

helonin commented 8 months ago

我发现是dataset.py文件有问题,把0.14的这个文件替换成0.16的同名文件,AICC就会变成负值