Skip to content

Instantly share code, notes, and snippets.

@haozhu233
Last active July 17, 2020 17:09
Show Gist options
  • Save haozhu233/f80f4b99256aeae13be88115977fa3a7 to your computer and use it in GitHub Desktop.
Save haozhu233/f80f4b99256aeae13be88115977fa3a7 to your computer and use it in GitHub Desktop.
Graph Propagation Example. See slides at https://bit.ly/intro_to_gnn
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Graph Propagation Demo\n",
"\n",
"## Graph Basics"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"g = nx.gnp_random_graph(4, .75)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nx.draw(g, with_labels = True)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0 1 1 1]\n",
" [1 0 0 1]\n",
" [1 0 0 1]\n",
" [1 1 1 0]]\n"
]
}
],
"source": [
"# Adjacency Matrix\n",
"A = nx.adjacency_matrix(g).todense()\n",
"print(A)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"N = g.number_of_nodes()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DegreeView({0: 3, 1: 2, 2: 2, 3: 3})"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Node degrees\n",
"g.degree"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[3. 0. 0. 0.]\n",
" [0. 2. 0. 0.]\n",
" [0. 0. 2. 0.]\n",
" [0. 0. 0. 3.]]\n"
]
}
],
"source": [
"# Degree Matrix\n",
"D_list = [v for (k,v) in g.degree]\n",
"D = np.zeros([N, N])\n",
"for (i, d) in enumerate(D_list):\n",
" D[i, i] = d\n",
"print(D)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Gragh propagation\n",
"Now let's creat some node features"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[4]\n",
" [4]\n",
" [1]\n",
" [8]]\n"
]
}
],
"source": [
"X = np.array([np.random.choice(10, 1) for _ in range(N)])\n",
"print(X)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we want to realize a very simple propagation rule $\\frac{1}{2}(X + D^{-1}AX)$"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[13]\n",
" [12]\n",
" [12]\n",
" [ 9]]\n"
]
}
],
"source": [
"AX = np.matmul(A, X)\n",
"print(AX)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0.33333333 0. 0. 0. ]\n",
" [0. 0.5 0. 0. ]\n",
" [0. 0. 0.5 0. ]\n",
" [0. 0. 0. 0.33333333]]\n"
]
}
],
"source": [
"normalized_D = np.linalg.matrix_power(D, -1)\n",
"print(normalized_D)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[4.33333333]\n",
" [6. ]\n",
" [6. ]\n",
" [3. ]]\n"
]
}
],
"source": [
"DAX = np.matmul(normalized_D, AX)\n",
"print(DAX)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[4.16666667],\n",
" [5. ],\n",
" [3.5 ],\n",
" [5.5 ]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(X + DAX)/2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment