diff --git a/chapter5/GCN_Citeseer.ipynb b/chapter5/GCN_Citeseer.ipynb
deleted file mode 100644
index 7ee9006..0000000
--- a/chapter5/GCN_Citeseer.ipynb
+++ /dev/null
@@ -1 +0,0 @@
-{"nbformat":4,"nbformat_minor":0,"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.5"},"pycharm":{"stem_cell":{"cell_type":"raw","metadata":{"collapsed":false},"source":[]}},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{},"toc_section_display":true,"toc_window_display":false},"colab":{"name":"GCN_Citeseer.ipynb","provenance":[{"file_id":"1LCz7jg1BKK7B-XYxllhQdEoqclCF6eBu","timestamp":1592241281458},{"file_id":"19-gWZ9OQpTPlmDWwokgGZa6x4zPR0Ty_","timestamp":1592240745659},{"file_id":"https://github.com/FighterLYL/GraphNeuralNetwork/blob/master/chapter5/GCN_Cora.ipynb","timestamp":1591814460632}]}},"cells":[{"cell_type":"markdown","metadata":{"id":"NG9czKKa9JBl","colab_type":"text"},"source":[""]},{"cell_type":"markdown","metadata":{"toc":true,"id":"Q6jPiEb0h2u7","colab_type":"text"},"source":["
Table of Contents
\n",""]},{"cell_type":"markdown","metadata":{"id":"lTMdIdS_h2u9","colab_type":"text"},"source":["# GCN node classification based on Citeseer dataset\n","\n","> Indented block\n","\n"]},{"cell_type":"markdown","metadata":{"pycharm":{"name":"#%% md\n"},"id":"6cxxdpEnh2u-","colab_type":"text"},"source":[""]},{"cell_type":"markdown","metadata":{"pycharm":{"name":"#%% md\n"},"id":"akNWQ75Th2u_","colab_type":"text"},"source":["When running in Colab, you can choose to use `GPU` through `Code Execution Program -> Change Runtime Type`"]},{"cell_type":"markdown","metadata":{"id":"HawIdURHh2vA","colab_type":"text"},"source":["## SetUp"]},{"cell_type":"code","metadata":{"id":"ff9XPZ-rh2vB","colab_type":"code","colab":{},"executionInfo":{"status":"ok","timestamp":1595357075679,"user_tz":180,"elapsed":3354,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}}},"source":["import itertools\n","import os\n","import os.path as osp\n","import pickle\n","import urllib\n","from collections import namedtuple\n","\n","import numpy as np\n","import scipy.sparse as sp\n","import torch\n","import torch.nn as nn\n","import torch.nn.functional as F\n","import torch.nn.init as init\n","import torch.optim as optim\n","import matplotlib.pyplot as plt\n","%matplotlib inline"],"execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"w3Bm3fTLh2vK","colab_type":"text"},"source":["## data preparation"]},{"cell_type":"code","metadata":{"id":"jq1tf0LMs1Yk","colab_type":"code","colab":{}},"source":["Data = namedtuple('Data', ['x', 'y', 'adjacency',\n"," 'train_mask', 'val_mask', 'test_mask'])"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"4NWDFaJIh2vL","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":477},"executionInfo":{"status":"error","timestamp":1595357261709,"user_tz":180,"elapsed":1002,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}},"outputId":"33fe9fbc-dec5-48e9-f15b-23f531ac302e"},"source":["Data = namedtuple('Data', ['x', 'y', 'adjacency',\n"," 'train_mask', 'val_mask', 'test_mask'])\n","\n","\n","def tensor_from_numpy(x, device):\n"," return torch.from_numpy(x).to(device)\n","\n","\n","class CiteseerData(object):\n"," download_url = \"https://raw.githubusercontent.com/kimiyoung/planetoid/master/data\"\n"," filenames = [\"ind.citeseer.{}\".format(name) for name in\n"," ['x', 'tx', 'allx', 'y', 'ty', 'ally', 'graph', 'test.index']]\n","\n"," def __init__(self, data_root=\"citeseer\", rebuild=False):\n","\n"," self.data_root = data_root\n"," save_file = osp.join(self.data_root, \"processed_citeseer.pkl\")\n"," if osp.exists(save_file) and not rebuild:\n"," print(\"Using Cached file: {}\".format(save_file))\n"," self._data = pickle.load(open(save_file, \"rb\"))\n"," else:\n"," self.maybe_download()\n"," self._data = self.process_data()\n"," with open(save_file, \"wb\") as f:\n"," pickle.dump(self.data, f)\n"," print(\"Cached file: {}\".format(save_file))\n"," \n"," @property\n"," def data(self):\n"," \"\"\"Return Data data objects, including x, y, adjacency, train_mask, val_mask, test_mask\"\"\"\n"," return self._data\n","\n"," def process_data(self):\n"," \"\"\"\n"," Process data to get node features and labels, adjacency matrix, training set, validation set and test set\n"," Quoted from:https://github.com/rusty1s/pytorch_geometric\n"," \"\"\"\n"," print(\"Process data ...\")\n"," _, tx, allx, y, ty, ally, graph, test_index = [self.read_data(\n"," osp.join(self.data_root, \"raw\", name)) for name in self.filenames]\n"," train_index = np.arange(y.shape[0])\n"," val_index = np.arange(y.shape[0], y.shape[0] + 500)\n"," sorted_test_index = sorted(test_index)\n","\n"," x = np.concatenate((allx, tx), axis=0)\n"," y = np.concatenate((ally, ty), axis=0).argmax(axis=1)\n","\n"," x[test_index] = x[sorted_test_index]\n"," y[test_index] = y[sorted_test_index]\n"," num_nodes = x.shape[0]\n","\n"," train_mask = np.zeros(num_nodes, dtype=np.bool)\n"," val_mask = np.zeros(num_nodes, dtype=np.bool)\n"," test_mask = np.zeros(num_nodes, dtype=np.bool)\n"," train_mask[train_index] = True\n"," val_mask[val_index] = True\n"," test_mask[test_index] = True\n"," adjacency = self.build_adjacency(graph)\n"," print(\"Node's feature shape: \", x.shape)\n"," print(\"Node's label shape: \", y.shape)\n"," print(\"Adjacency's shape: \", adjacency.shape)\n"," print(\"Number of training nodes: \", train_mask.sum())\n"," print(\"Number of validation nodes: \", val_mask.sum())\n"," print(\"Number of test nodes: \", test_mask.sum())\n","\n"," return Data(x=x, y=y, adjacency=adjacency,\n"," train_mask=train_mask, val_mask=val_mask, test_mask=test_mask)\n","\n"," def maybe_download(self):\n"," save_path = os.path.join(self.data_root, \"raw\")\n"," for name in self.filenames:\n"," if not osp.exists(osp.join(save_path, name)):\n"," self.download_data(\n"," \"{}/{}\".format(self.download_url, name), save_path)\n","\n"," @staticmethod\n"," def build_adjacency(adj_dict):\n"," \"\"\"Create adjacency matrix from adjacency list\"\"\"\n"," edge_index = []\n"," num_nodes = len(adj_dict)\n"," for src, dst in adj_dict.items():\n"," edge_index.extend([src, v] for v in dst)\n"," edge_index.extend([v, src] for v in dst)\n"," # Remove duplicate edges\n"," edge_index = list(k for k, _ in itertools.groupby(sorted(edge_index)))\n"," edge_index = np.asarray(edge_index)\n"," adjacency = sp.coo_matrix((np.ones(len(edge_index)), \n"," (edge_index[:, 0], edge_index[:, 1])),\n"," shape=(num_nodes, num_nodes), dtype=\"float32\")\n"," return adjacency\n","\n"," @staticmethod\n"," def read_data(path):\n"," \"\"\"Use different methods to read raw data for further processing\"\"\"\n"," name = osp.basename(path)\n"," if name == \"ind.citeseer.test.index\":\n"," out = np.genfromtxt(path, dtype=\"int64\")\n"," return out\n"," else:\n"," out = pickle.load(open(path, \"rb\"), encoding=\"latin1\")\n"," out = out.toarray() if hasattr(out, \"toarray\") else out\n"," return out\n","\n"," @staticmethod\n"," def download_data(url, save_path):\n"," \"\"\"Data download tool, which will download when the original data does not exist\"\"\"\n"," if not os.path.exists(save_path):\n"," os.makedirs(save_path)\n"," data = urllib.request.urlopen(url)\n"," filename = os.path.split(url)[-1]\n","\n"," with open(os.path.join(save_path, filename), 'wb') as f:\n"," f.write(data.read())\n","\n"," return True\n","\n"," @staticmethod\n"," def normalization(adjacency):\n"," \"\"\"Calculation L=D^-0.5 * (A+I) * D^-0.5\"\"\"\n"," adjacency += sp.eye(adjacency.shape[0]) # Increase self-connection\n"," degree = np.array(adjacency.sum(1))\n"," d_hat = sp.diags(np.power(degree, -0.5).flatten())\n"," return d_hat.dot(adjacency).dot(d_hat).tocoo()\n","\n","dataset = CiteseerData().data"],"execution_count":4,"outputs":[{"output_type":"stream","text":["Process data ...\n"],"name":"stdout"},{"output_type":"error","ename":"IndexError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 123\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0md_hat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0madjacency\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md_hat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtocoo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 125\u001b[0;31m \u001b[0mdataset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCiteseerData\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data_root, rebuild)\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaybe_download\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprocess_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msave_file\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"wb\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m\u001b[0m in \u001b[0;36mprocess_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcatenate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mally\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mty\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 48\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtest_index\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_test_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 49\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtest_index\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_test_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0mnum_nodes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mIndexError\u001b[0m: index 3312 is out of bounds for axis 0 with size 3312"]}]},{"cell_type":"markdown","metadata":{"id":"iZsOpWJph2vP","colab_type":"text"},"source":["## Graph convolution layer definition"]},{"cell_type":"code","metadata":{"id":"J279vjZ8h2vQ","colab_type":"code","colab":{},"executionInfo":{"status":"ok","timestamp":1595358127985,"user_tz":180,"elapsed":976,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}}},"source":["class GraphConvolution(nn.Module):\n"," def __init__(self, input_dim, output_dim, use_bias=True):\n"," \"\"\"Graph convolution:L*X*\\theta\n","\n"," Args:\n"," ----------\n"," input_dim: int\n"," Dimension of node input feature\n"," output_dim: int\n"," Output feature dimension\n"," use_bias : bool, optional\n"," Whether to use offset\n"," \"\"\"\n"," super(GraphConvolution, self).__init__()\n"," self.input_dim = input_dim\n"," self.output_dim = output_dim\n"," self.use_bias = use_bias\n"," self.weight = nn.Parameter(torch.Tensor(input_dim, output_dim))\n"," if self.use_bias:\n"," self.bias = nn.Parameter(torch.Tensor(output_dim))\n"," else:\n"," self.register_parameter('bias', None)\n"," self.reset_parameters()\n","\n"," def reset_parameters(self):\n"," init.kaiming_uniform_(self.weight)\n"," if self.use_bias:\n"," init.zeros_(self.bias)\n","\n"," def forward(self, adjacency, input_feature):\n"," \"\"\"The adjacency matrix is a sparse matrix, so sparse matrix multiplication is used in the calculation\n"," \n"," Args: \n"," -------\n"," adjacency: torch.sparse.FloatTensor\n"," Adjacency matrix\n"," input_feature: torch.Tensor\n"," Input characteristics\n"," \"\"\"\n"," support = torch.mm(input_feature, self.weight)\n"," output = torch.sparse.mm(adjacency, support)\n"," if self.use_bias:\n"," output += self.bias\n"," return output\n","\n"," def __repr__(self):\n"," return self.__class__.__name__ + ' (' \\\n"," + str(self.input_dim) + ' -> ' \\\n"," + str(self.output_dim) + ')'\n"],"execution_count":5,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"VYAn51ozh2vT","colab_type":"text"},"source":["## Model definition\n","\n","Readers can modify and experiment the GCN model structure by themselves"]},{"cell_type":"code","metadata":{"id":"lZKNDiygh2vV","colab_type":"code","colab":{},"executionInfo":{"status":"ok","timestamp":1595358134751,"user_tz":180,"elapsed":1001,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}}},"source":["class GcnNet(nn.Module):\n"," \"\"\"\n"," Define a model with two layers of GraphConvolution\n"," \"\"\"\n"," def __init__(self, input_dim=1433):\n"," super(GcnNet, self).__init__()\n"," self.gcn1 = GraphConvolution(input_dim, 16)\n"," self.gcn2 = GraphConvolution(16, 7)\n"," \n"," def forward(self, adjacency, feature):\n"," h = F.relu(self.gcn1(adjacency, feature))\n"," logits = self.gcn2(adjacency, h)\n"," return logits\n"],"execution_count":6,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"CVJXrqKhh2va","colab_type":"text"},"source":["## Model training"]},{"cell_type":"code","metadata":{"id":"jWLWmStwh2vb","colab_type":"code","colab":{},"executionInfo":{"status":"ok","timestamp":1595358140968,"user_tz":180,"elapsed":1029,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}}},"source":["# Hyperparameter definition\n","LEARNING_RATE = 0.1\n","WEIGHT_DACAY = 5e-4\n","EPOCHS = 200\n","DEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\""],"execution_count":7,"outputs":[]},{"cell_type":"code","metadata":{"id":"UKvOb9Mrh2vf","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":511},"executionInfo":{"status":"error","timestamp":1592249076048,"user_tz":180,"elapsed":1088,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}},"outputId":"48e9091d-7757-493c-a0f7-db63d34db19c"},"source":["# Load data and convert to torch.Tensor\n","dataset = CiteseerData().data\n","node_feature = dataset.x / dataset.x.sum(1, keepdims=True) # Normalize the data so that each row is 1\n","tensor_x = tensor_from_numpy(node_feature, DEVICE)\n","tensor_y = tensor_from_numpy(dataset.y, DEVICE)\n","tensor_train_mask = tensor_from_numpy(dataset.train_mask, DEVICE)\n","tensor_val_mask = tensor_from_numpy(dataset.val_mask, DEVICE)\n","tensor_test_mask = tensor_from_numpy(dataset.test_mask, DEVICE)\n","normalize_adjacency = CiteseerData.normalization(dataset.adjacency) # Normalized adjacency matrix\n","\n","num_nodes, input_dim = node_feature.shape\n","indices = torch.from_numpy(np.asarray([normalize_adjacency.row, \n"," normalize_adjacency.col]).astype('int64')).long()\n","values = torch.from_numpy(normalize_adjacency.data.astype(np.float32))\n","tensor_adjacency = torch.sparse.FloatTensor(indices, values, \n"," (num_nodes, num_nodes)).to(DEVICE)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Process data ...\n"],"name":"stdout"},{"output_type":"error","ename":"IndexError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0;31m# Load data and convert to torch.Tensor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 127\u001b[0;31m \u001b[0mdataset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCiteseerData\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 128\u001b[0m \u001b[0mnode_feature\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Normalize the data so that each row is 1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 129\u001b[0m \u001b[0mtensor_x\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtensor_from_numpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnode_feature\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDEVICE\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data_root, rebuild)\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaybe_download\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprocess_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msave_file\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"wb\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m\u001b[0m in \u001b[0;36mprocess_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcatenate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mally\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mty\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 48\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtest_index\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_test_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 49\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtest_index\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_test_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0mnum_nodes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mIndexError\u001b[0m: index 3312 is out of bounds for axis 0 with size 3312"]}]},{"cell_type":"code","metadata":{"pycharm":{"name":"#%%\n"},"id":"l9QctL7ch2vo","colab_type":"code","colab":{}},"source":["# Model definition: Model, Loss, Optimizer\n","model = GcnNet(input_dim).to(DEVICE)\n","criterion = nn.CrossEntropyLoss().to(DEVICE)\n","optimizer = optim.Adam(model.parameters(), \n"," lr=LEARNING_RATE, \n"," weight_decay=WEIGHT_DACAY)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"5ykdjB5_h2vs","colab_type":"code","colab":{}},"source":["# Training body function\n","def train():\n"," loss_history = []\n"," val_acc_history = []\n"," model.train()\n"," train_y = tensor_y[tensor_train_mask]\n"," for epoch in range(EPOCHS):\n"," logits = model(tensor_adjacency, tensor_x) # Forward propagation\n"," train_mask_logits = logits[tensor_train_mask] # Only select training nodes for supervision\n"," loss = criterion(train_mask_logits, train_y) # Calculate the loss value\n"," optimizer.zero_grad()\n"," loss.backward() # Backpropagation calculation parameter gradient\n"," optimizer.step() # Gradient update using optimization method\n"," train_acc, _, _ = test(tensor_train_mask) # Calculate the accuracy on the current model training set\n"," val_acc, _, _ = test(tensor_val_mask) # Calculate the accuracy of the current model on the validation set\n"," # Record the change of loss value and accuracy during training, used for drawing\n"," loss_history.append(loss.item())\n"," val_acc_history.append(val_acc.item())\n"," print(\"Epoch {:03d}: Loss {:.4f}, TrainAcc {:.4}, ValAcc {:.4f}\".format(\n"," epoch, loss.item(), train_acc.item(), val_acc.item()))\n"," \n"," return loss_history, val_acc_history\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"HrJFzg3qh2vv","colab_type":"code","colab":{}},"source":["# Test function\n","def test(mask):\n"," model.eval()\n"," with torch.no_grad():\n"," logits = model(tensor_adjacency, tensor_x)\n"," test_mask_logits = logits[mask]\n"," predict_y = test_mask_logits.max(1)[1]\n"," accuarcy = torch.eq(predict_y, tensor_y[mask]).float().mean()\n"," return accuarcy, test_mask_logits.cpu().numpy(), tensor_y[mask].cpu().numpy()\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"1iWcnctZh2vy","colab_type":"code","colab":{}},"source":["def plot_loss_with_acc(loss_history, val_acc_history):\n"," fig = plt.figure()\n"," ax1 = fig.add_subplot(111)\n"," ax1.plot(range(len(loss_history)), loss_history,\n"," c=np.array([255, 71, 90]) / 255.)\n"," plt.ylabel('Loss')\n"," \n"," ax2 = fig.add_subplot(111, sharex=ax1, frameon=False)\n"," ax2.plot(range(len(val_acc_history)), val_acc_history,\n"," c=np.array([79, 179, 255]) / 255.)\n"," ax2.yaxis.tick_right()\n"," ax2.yaxis.set_label_position(\"right\")\n"," plt.ylabel('ValAcc')\n"," \n"," plt.xlabel('Epoch')\n"," plt.title('Training Loss & Validation Accuracy')\n"," plt.show()\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"VRtST-w-h2v2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1592241033210,"user_tz":180,"elapsed":16853,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}},"outputId":"9c9e45ac-92a6-4465-a29e-fec06c48b1a6"},"source":["loss, val_acc = train()\n","test_acc, test_logits, test_label = test(tensor_test_mask)\n","print(\"Test accuarcy: \", test_acc.item())"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Epoch 000: Loss 1.9418, TrainAcc 0.3333, ValAcc 0.1960\n","Epoch 001: Loss 1.5670, TrainAcc 0.3333, ValAcc 0.1960\n","Epoch 002: Loss 1.2874, TrainAcc 0.3667, ValAcc 0.2040\n","Epoch 003: Loss 1.1071, TrainAcc 0.75, ValAcc 0.5780\n","Epoch 004: Loss 1.0043, TrainAcc 0.8167, ValAcc 0.6640\n","Epoch 005: Loss 0.9323, TrainAcc 0.9, ValAcc 0.7280\n","Epoch 006: Loss 0.8574, TrainAcc 0.9167, ValAcc 0.6980\n","Epoch 007: Loss 0.7906, TrainAcc 0.9167, ValAcc 0.7000\n","Epoch 008: Loss 0.7278, TrainAcc 0.9333, ValAcc 0.7280\n","Epoch 009: Loss 0.6589, TrainAcc 0.9333, ValAcc 0.7500\n","Epoch 010: Loss 0.5902, TrainAcc 0.95, ValAcc 0.7780\n","Epoch 011: Loss 0.5261, TrainAcc 0.95, ValAcc 0.7860\n","Epoch 012: Loss 0.4638, TrainAcc 0.95, ValAcc 0.7700\n","Epoch 013: Loss 0.4055, TrainAcc 0.95, ValAcc 0.7620\n","Epoch 014: Loss 0.3559, TrainAcc 0.9667, ValAcc 0.7780\n","Epoch 015: Loss 0.3106, TrainAcc 0.9667, ValAcc 0.7800\n","Epoch 016: Loss 0.2721, TrainAcc 0.9667, ValAcc 0.7940\n","Epoch 017: Loss 0.2394, TrainAcc 0.9833, ValAcc 0.8020\n","Epoch 018: Loss 0.2127, TrainAcc 0.9833, ValAcc 0.7940\n","Epoch 019: Loss 0.1909, TrainAcc 0.9833, ValAcc 0.8020\n","Epoch 020: Loss 0.1729, TrainAcc 0.9833, ValAcc 0.8000\n","Epoch 021: Loss 0.1596, TrainAcc 1.0, ValAcc 0.8080\n","Epoch 022: Loss 0.1488, TrainAcc 1.0, ValAcc 0.8040\n","Epoch 023: Loss 0.1402, TrainAcc 1.0, ValAcc 0.8100\n","Epoch 024: Loss 0.1341, TrainAcc 1.0, ValAcc 0.8120\n","Epoch 025: Loss 0.1296, TrainAcc 1.0, ValAcc 0.8120\n","Epoch 026: Loss 0.1264, TrainAcc 1.0, ValAcc 0.8100\n","Epoch 027: Loss 0.1240, TrainAcc 1.0, ValAcc 0.8080\n","Epoch 028: Loss 0.1231, TrainAcc 1.0, ValAcc 0.8120\n","Epoch 029: Loss 0.1220, TrainAcc 1.0, ValAcc 0.8080\n","Epoch 030: Loss 0.1212, TrainAcc 1.0, ValAcc 0.8120\n","Epoch 031: Loss 0.1200, TrainAcc 1.0, ValAcc 0.8100\n","Epoch 032: Loss 0.1182, TrainAcc 1.0, ValAcc 0.8040\n","Epoch 033: Loss 0.1162, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 034: Loss 0.1137, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 035: Loss 0.1109, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 036: Loss 0.1080, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 037: Loss 0.1046, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 038: Loss 0.1013, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 039: Loss 0.0983, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 040: Loss 0.0953, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 041: Loss 0.0928, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 042: Loss 0.0905, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 043: Loss 0.0885, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 044: Loss 0.0869, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 045: Loss 0.0855, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 046: Loss 0.0843, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 047: Loss 0.0833, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 048: Loss 0.0824, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 049: Loss 0.0814, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 050: Loss 0.0806, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 051: Loss 0.0798, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 052: Loss 0.0789, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 053: Loss 0.0779, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 054: Loss 0.0769, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 055: Loss 0.0760, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 056: Loss 0.0750, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 057: Loss 0.0741, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 058: Loss 0.0732, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 059: Loss 0.0723, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 060: Loss 0.0715, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 061: Loss 0.0708, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 062: Loss 0.0701, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 063: Loss 0.0695, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 064: Loss 0.0690, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 065: Loss 0.0685, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 066: Loss 0.0681, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 067: Loss 0.0677, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 068: Loss 0.0675, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 069: Loss 0.0674, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 070: Loss 0.0677, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 071: Loss 0.0676, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 072: Loss 0.0665, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 073: Loss 0.0645, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 074: Loss 0.0640, TrainAcc 1.0, ValAcc 0.7980\n","Epoch 075: Loss 0.0645, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 076: Loss 0.0637, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 077: Loss 0.0627, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 078: Loss 0.0629, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 079: Loss 0.0632, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 080: Loss 0.0626, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 081: Loss 0.0620, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 082: Loss 0.0623, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 083: Loss 0.0623, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 084: Loss 0.0616, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 085: Loss 0.0611, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 086: Loss 0.0611, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 087: Loss 0.0609, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 088: Loss 0.0604, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 089: Loss 0.0598, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 090: Loss 0.0597, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 091: Loss 0.0597, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 092: Loss 0.0593, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 093: Loss 0.0590, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 094: Loss 0.0589, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 095: Loss 0.0589, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 096: Loss 0.0587, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 097: Loss 0.0584, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 098: Loss 0.0582, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 099: Loss 0.0581, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 100: Loss 0.0580, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 101: Loss 0.0578, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 102: Loss 0.0575, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 103: Loss 0.0573, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 104: Loss 0.0572, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 105: Loss 0.0571, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 106: Loss 0.0569, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 107: Loss 0.0568, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 108: Loss 0.0566, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 109: Loss 0.0564, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 110: Loss 0.0562, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 111: Loss 0.0561, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 112: Loss 0.0560, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 113: Loss 0.0560, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 114: Loss 0.0558, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 115: Loss 0.0557, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 116: Loss 0.0556, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 117: Loss 0.0554, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 118: Loss 0.0553, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 119: Loss 0.0552, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 120: Loss 0.0551, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 121: Loss 0.0550, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 122: Loss 0.0549, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 123: Loss 0.0548, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 124: Loss 0.0547, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 125: Loss 0.0546, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 126: Loss 0.0545, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 127: Loss 0.0544, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 128: Loss 0.0544, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 129: Loss 0.0545, TrainAcc 1.0, ValAcc 0.7920\n","Epoch 130: Loss 0.0548, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 131: Loss 0.0555, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 132: Loss 0.0569, TrainAcc 1.0, ValAcc 0.7740\n","Epoch 133: Loss 0.0584, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 134: Loss 0.0584, TrainAcc 1.0, ValAcc 0.7780\n","Epoch 135: Loss 0.0533, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 136: Loss 0.0502, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 137: Loss 0.0529, TrainAcc 1.0, ValAcc 0.7800\n","Epoch 138: Loss 0.0521, TrainAcc 1.0, ValAcc 0.7820\n","Epoch 139: Loss 0.0506, TrainAcc 1.0, ValAcc 0.7960\n","Epoch 140: Loss 0.0532, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 141: Loss 0.0543, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 142: Loss 0.0532, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 143: Loss 0.0539, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 144: Loss 0.0556, TrainAcc 1.0, ValAcc 0.8000\n","Epoch 145: Loss 0.0557, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 146: Loss 0.0540, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 147: Loss 0.0529, TrainAcc 1.0, ValAcc 0.7940\n","Epoch 148: Loss 0.0534, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 149: Loss 0.0530, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 150: Loss 0.0518, TrainAcc 1.0, ValAcc 0.7900\n","Epoch 151: Loss 0.0518, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 152: Loss 0.0523, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 153: Loss 0.0522, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 154: Loss 0.0520, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 155: Loss 0.0526, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 156: Loss 0.0532, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 157: Loss 0.0527, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 158: Loss 0.0527, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 159: Loss 0.0529, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 160: Loss 0.0528, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 161: Loss 0.0524, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 162: Loss 0.0520, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 163: Loss 0.0521, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 164: Loss 0.0520, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 165: Loss 0.0518, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 166: Loss 0.0517, TrainAcc 1.0, ValAcc 0.7820\n","Epoch 167: Loss 0.0519, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 168: Loss 0.0520, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 169: Loss 0.0519, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 170: Loss 0.0519, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 171: Loss 0.0519, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 172: Loss 0.0520, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 173: Loss 0.0519, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 174: Loss 0.0517, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 175: Loss 0.0516, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 176: Loss 0.0516, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 177: Loss 0.0516, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 178: Loss 0.0515, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 179: Loss 0.0514, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 180: Loss 0.0514, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 181: Loss 0.0514, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 182: Loss 0.0515, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 183: Loss 0.0514, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 184: Loss 0.0514, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 185: Loss 0.0513, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 186: Loss 0.0513, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 187: Loss 0.0513, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 188: Loss 0.0513, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 189: Loss 0.0512, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 190: Loss 0.0512, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 191: Loss 0.0511, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 192: Loss 0.0511, TrainAcc 1.0, ValAcc 0.7880\n","Epoch 193: Loss 0.0511, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 194: Loss 0.0511, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 195: Loss 0.0511, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 196: Loss 0.0510, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 197: Loss 0.0510, TrainAcc 1.0, ValAcc 0.7860\n","Epoch 198: Loss 0.0510, TrainAcc 1.0, ValAcc 0.7840\n","Epoch 199: Loss 0.0510, TrainAcc 1.0, ValAcc 0.7860\n","Test accuarcy: 0.7950000166893005\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"scrolled":true,"id":"4ZacVcxEh2v6","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":295},"executionInfo":{"status":"ok","timestamp":1592241036392,"user_tz":180,"elapsed":871,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}},"outputId":"42cc9bc4-863e-425d-d03c-387b5a498fd2"},"source":["plot_loss_with_acc(loss, val_acc)"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"GmVPOAdAh2v-","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"status":"ok","timestamp":1592241074967,"user_tz":180,"elapsed":8163,"user":{"displayName":"Vanessa Telles","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhOCnEbRMHk2CMymjVwR7WVAmU6XVe9O3RWXHWdHw=s64","userId":"17959879045291883948"}},"outputId":"719dada7-6ad9-4ce0-d7b3-70eb6e9152b2"},"source":["# Draw TSNE dimension reduction graph of test data\n","from sklearn.manifold import TSNE\n","tsne = TSNE()\n","out = tsne.fit_transform(test_logits)\n","fig = plt.figure()\n","for i in range(7):\n"," indices = test_label == i\n"," x, y = out[indices].T\n"," plt.scatter(x, y, label=str(i))\n","plt.legend()"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":14},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"tags":[],"needs_background":"light"}}]}]}
\ No newline at end of file