Torch Geometric GCN训练心得
我训练的是直推式的图卷积神经网络GCN
对于直推式GCN训练,控制参数量是非常重要的,我的网络大小30个节点:
不像归纳式学习训练,可以通过提升样本数量来承受巨大的模型参数量,直推式学习一次训练的目标就一个样本,是没办法承受巨大的模型参数量的。
原来的模型参数量如下:
class Net(torch.nn.Module):def __init__(self):super().__init__()self.conv1 = GCNConv(Input_L, 2000)self.conv2 = GCNConv(2000, 500)
训练时loss死活降不下去:
反倒是我把图中每个节点特征前10%的部分置零后,可以正常训练(我正在测试数据缺失带来的影响):
开始怀疑是数据量和模型参数量之间的问题
调整模型参数量后:
class Net(torch.nn.Module):def __init__(self):super().__init__()self.conv1 = GCNConv(Input_L, 500)self.conv2 = GCNConv(500, 100)
loss值开始往下掉了:
置零10%也没问题:
VC维理论中有样本和模型复杂度匹配的公式可以参考。当然,前提是训练集得收敛,训练集都收敛不了,验证集更不可能收敛了: