Pytorch和torch_geometric一些代码的细节理解

1、GCN等图神经网络的输入参数对应关系
model部分内容
在这里插入图片描述
forward部分内容
Pytorch和torch_geometric一些代码的细节理解_第1张图片
输入对应的分别是每个节点的自身特征,图中边的关系,以及边权的值。
在这里插入图片描述

需要注意的是,边权值这一项常常被忽略,但实际运行中确有很大意义。
本来五个模型的ROC曲线基本一致,在origin_model上取消边权值一项后训练效果迅速下降。
Pytorch和torch_geometric一些代码的细节理解_第2张图片

2、关于torch_tensor,numpy.array的使用方法
torch_tensor和numpy.array使用方法接近,并可相互转化。
torch_tensor转为numpy.array的语句为:

# a为torch_tensor,需转化为numpy.array
a.numpy()

另外,torch.tensor和numpy.array都支持下列语法:
Pytorch和torch_geometric一些代码的细节理解_第3张图片
这种写法为神经网络模型的处理带来了很多便利。

3、使用sklearn画出ROC曲线并计算AUC值的方法
代码很简单,直接附在下面

def cal_roc(score,standard):
    # 计算出每个模型预测结果对应的fpr,tpr
    y = standard.cpu().detach().numpy().flatten() # y表示真实标签
    predict = score.cpu().detach().numpy().flatten() # predict表示预测出来的值   
    fpr,tpr,threshold = roc_curve(y,predict)
    AUC = auc(fpr, tpr)
    AUC = ('%.5f' % AUC) # 只比较auc前5位数字
    return fpr,tpr,AUC

def plot_roc(fpr_list,tpr_list,auc_list,model_name):
    # 在一张图中画出多个model的roc曲线
    fig = plt.figure()
    legend_list=[]
    for i in range(len(model_name)):
        plt.plot(fpr_list[i], tpr_list[i])  # 先x后y
        legend_list.append(model_name[i]+'(auc:'+str(auc_list[i])+')')
    plt.legend(legend_list)
    plt.xlabel('False Positve Rate')
    plt.ylabel('True Postive Rate')
    plt.title('ROC curve for RNA-disease model')
    fig.savefig("ROC.png")
    plt.show()
    return 

上述代码可通过plt将多个ROC曲线画在一张图上。
值得注意的是,sklearn不支持对torch.tensor的处理,因此绘制时需要将torch.tensor转回nd.array。

4、对torch.tensor进行维度变换的语句
在这里插入图片描述

你可能感兴趣的:(图神经网络)