Dynamic Graph Convolutional Networks. Pattern recognition 2019

摘要

我们的目标是通过使用神经网络模型来联合开发结构化数据和时间信息。基于这个原因,我们提出了两种新的方法,将长-短期记忆网络和图卷积网络结合起来,结合图结构来学习长-短期依赖关系。

介绍

balabalbala....,许多真实世界的结构化数据是动态的,并且图中的节点/边可能会随着时间而变化。在这种动态场景中,时间信息也可以发挥重要作用。

LSTM和GCN简介。

本文的组织结构如下:第2节总结了最相关的方法。在第3节中,我们描述了我们的方法。第4节介绍了与基准方法的比较。第5节通过讨论我们的发现和未来可能的扩展来结束本文。

相关工作

有少量的方法被设计用于对动态网络中的节点进行分类[14,22]。Li等人[14]提出了一种能够学习潜在特征表示并捕获动态模式的方法。Yao等人[22]提出了一种基于支持向量机的方法,该方法将先前时间瞬间的支持向量与当前训练数据相结合,以利用时间关系。Pei等人[17]为动态社交网络中的节点分类定义了一种称为动态因子图模型的方法。更准确地说,这种方法将动态图形数据组织成一系列图形。设计了三种类型的因子,即节点因子、相关因子和动态因子,分别捕获节点特征、节点相关性和时间相关性。节点因子和相关因子被设计用来捕获图结构的全局和局部特性,而动态因子则利用了时间信息。

总结:以上提及的神经网络结构不能正确处理时间信息(无法捕捉动态--个人理解)。

我们的方法(跩~)

由于我们感兴趣的任务的动态性质,本文提出的新网络结构将适用于图的有序序列和顶点特征的有序序列。

我们的贡献基于将图卷积的扩展(GC,GCNs的基本层)和LSTM的改进版本相结合的思想,从而通过利用图结构数据和顶点特

### 使用图卷积网络进行多标签图像识别 #### 图卷积网络的基础概念 图卷积网络(Graph Convolutional Networks, GCNs)是一种扩展传统卷积神经网络的方法,用于处理结构化的图数据。GCNs的核心思想是通过图上的拉普拉斯算子将传统的卷积操作推广到不规则的图结构上[^3]。 对于多标签图像识别任务,可以利用图卷积网络建模图像中的对象关系以及它们之间的语义关联。具体来说,一张图像可以通过构建其内部的对象间的关系图来进行表示。这种图结构允许捕捉复杂的交互模式并增强模型的学习能力。 #### 数据预处理与图构建 为了应用GCNs于多标签图像识别中,通常需要先从原始图像提取特征,并基于这些特征构建对应的图结构。以下是实现这一目标的关键步骤: 1. **特征提取**: 利用预先训练好的卷积神经网络(如ResNet或VGG),对每张输入图片提取高层语义特征。 2. **邻接矩阵计算**: 构造一个描述不同区域之间相似度或者空间位置关系的邻接矩阵A。该矩阵反映了节点间的连通性和权重分布情况。 3. **标准化**: 对生成的数据集执行零均值单位方差规范化处理以提高数值稳定性[^5]。 #### 实现过程概述 下面给出一个多标签图像分类任务的一个简单框架实例: ```python import tensorflow as tf from tensorflow.keras import layers class GraphConvLayer(layers.Layer): def __init__(self, units=64, activation='relu', **kwargs): super(GraphConvLayer, self).__init__(**kwargs) self.units = units self.activation = tf.keras.activations.get(activation) def build(self, input_shape): w_init = tf.random_normal_initializer() self.weight = tf.Variable( initial_value=w_init(shape=(input_shape[-1], self.units), dtype="float32"), trainable=True, ) def call(self, inputs, adjacency_matrix): aggregated_features = tf.matmul(adjacency_matrix, inputs) outputs = tf.matmul(aggregated_features, self.weight) return self.activation(outputs) def create_model(input_dim, num_classes, adj_matrix_placeholder): feature_input = tf.keras.Input(shape=(None, input_dim)) gc_layer_1 = GraphConvLayer(units=128)(feature_input, adj_matrix_placeholder) dropout_1 = layers.Dropout(rate=0.5)(gc_layer_1) gc_layer_2 = GraphConvLayer(units=num_classes, activation=None)(dropout_1, adj_matrix_placeholder) sigmoid_output = layers.Activation('sigmoid')(gc_layer_2) model = tf.keras.Model(inputs=[feature_input, adj_matrix_placeholder], outputs=sigmoid_output) return model # Example usage: num_nodes = 100 # Number of regions/objects per image. input_dim = 512 # Dimensionality after CNN extraction. adj_matrix_ph = tf.placeholder(tf.float32, shape=(None, None)) model = create_model(input_dim=input_dim, num_classes=20, adj_matrix_placeholder=adj_matrix_ph) ``` 上述代码片段展示了如何创建自定义层`GraphConvLayer`来完成基本的图卷积运算,并将其应用于最终的任务当中。 #### 结果评估与优化策略 当涉及到实际部署时,可能还需要考虑一些额外的因素比如超参数调优、正则化方法的选择等。此外,在面对大规模稀疏图的情况下,则需特别注意内存消耗问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值