利用Sequential模型构造一个二层CNN+MLP的多分类任务。任务描述,有一个有向网络,现在需要对网络中的节点进行分类。这里节点的类别就是节点本身,对同一个节点进行多次随机游走得到不同的随机游走序列表示。通过构造的深度学习模型能正确分辨出属于同一节点的不同游走序列。
1.数据加载+构建网络
网络构建,读取一个邻接表文件构建有向图。
class DiGraphs(object):
def __init__(self, data_path):
self.data_path = data_path
def getDiGraph(self):
di_graph = nx.DiGraph()
temp_list = np.loadtxt(self.data_path)
di_graph.add_edges_from(temp_list)
return di_graph
随即游走序列产生,给定一个网络和种子节点,设定好需要产生序列的长度,得到一个节点组成的有序序列。
class NodeSequence(object):
def __init__(self, graph_net, source_node, sequence_len):
self.graph_net = graph_net
self.source_node = source_node
self.sequence_len = sequence_len
self.node_sequence = []
def getSequence(self):
current_node = self.source_node
for i in range(self.sequence_len):
self.node_sequence.append(current_node)
neibor_list = list(self.graph_net.neighbors(current_node))
if 0 == len(neibor_list):
current_node = self.source_node
else:
rand_num = np.random.random()
current_node = neibor