Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save maxentile/fa8d173b0217370c3866bf150e85056d to your computer and use it in GitHub Desktop.
Save maxentile/fa8d173b0217370c3866bf150e85056d to your computer and use it in GitHub Desktop.
try to assign unique labels to each unique-up-to-symmetry atom in a partially symmetric molecule
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# atoms: 25, # symmetry classes: 15\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"RDKit WARNING: [23:09:46] Enabling RDKit 2019.09.3 jupyter extensions\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x12edc7430>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import dgl\n",
"from dgl.nn.pytorch import GraphConv, GINConv, GATConv, TAGConv\n",
"import torch.nn.functional as F\n",
"from torch import nn\n",
"\n",
"class TAG(nn.Module):\n",
" def __init__(self, in_feats, h_feats, num_classes, k=2):\n",
" super(TAG, self).__init__()\n",
" self.layer1 = TAGConv(in_feats, h_feats, k)\n",
" self.layer2 = TAGConv(h_feats, h_feats, k)\n",
" self.layer3 = TAGConv(h_feats, num_classes, k)\n",
" \n",
" def forward(self, graph, inputs):\n",
" h = self.layer1(graph, inputs)\n",
" h = F.relu(h)\n",
" h = self.layer2(graph, h)\n",
" h = F.relu(h)\n",
" h = self.layer3(graph, h)\n",
" return h\n",
" \n",
"from sklearn.preprocessing import OneHotEncoder\n",
"def construct_node_classification_targets(mol):\n",
" oemol = mol.to_openeye()\n",
" oechem.OEPerceiveSymmetry(oemol)\n",
" symmetry_classes = np.array([atom.GetSymmetryClass() for atom in oemol.GetAtoms()])\n",
" \n",
" ohe = OneHotEncoder(sparse=False)\n",
" return ohe.fit_transform(symmetry_classes.reshape(-1, 1))\n",
"\n",
"from openeye import oechem\n",
"from openforcefield.topology import Molecule\n",
"import numpy as np\n",
"\n",
"smiles = 'NC(N1)=NC2(CCCCC2)C1=O'\n",
"mol = Molecule.from_smiles(smiles, hydrogens_are_explicit=False, allow_undefined_stereo=True)\n",
"\n",
"oemol = mol.to_openeye()\n",
"oechem.OEPerceiveSymmetry(oemol)\n",
"symmetry_classes = np.array([atom.GetSymmetryClass() for atom in oemol.GetAtoms()])\n",
"print('# atoms: {}, # symmetry classes: {}'.format(len(symmetry_classes), len(set(symmetry_classes))))\n",
"\n",
"from rdkit.Chem.rdFingerprintGenerator import GetMorganGenerator\n",
"\n",
"radius = 5\n",
"fpSize = 512\n",
"morgan_generator = GetMorganGenerator(radius=radius, fpSize=fpSize)\n",
"\n",
"def compute_atom_centered_morgan_fingerprints(rdmol, morgan_generator, fpSize):\n",
" n_atoms = rdmol.GetNumAtoms()\n",
" fingerprints = np.zeros((n_atoms, fpSize), dtype=int)\n",
"\n",
" for i in range(rdmol.GetNumAtoms()):\n",
" fingerprint = morgan_generator.GetCountFingerprint(rdmol, fromAtoms=[i])\n",
" for (key, val) in fingerprint.GetNonzeroElements().items():\n",
" fingerprints[i, key] = val\n",
" return fingerprints\n",
"\n",
"\n",
"rdmol = mol.to_rdkit()\n",
"fingerprints = compute_atom_centered_morgan_fingerprints(rdmol, morgan_generator, fpSize)\n",
"y = construct_node_classification_targets(mol)\n",
"\n",
"input_dim = fingerprints.shape[1]\n",
"hidden_dim = 100\n",
"output_dim = y.shape[1]\n",
"net = TAG(input_dim, hidden_dim, output_dim)\n",
"mol.to_rdkit()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DGLGraph(num_nodes=25, num_edges=52,\n",
" ndata_schemes={}\n",
" edata_schemes={})"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"graph = dgl.DGLGraph()\n",
"graph.from_networkx(mol.to_networkx())\n",
"graph"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"input_tensor = torch.Tensor(fingerprints)\n",
"output_tensor = torch.Tensor(y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1000/1000 [00:09<00:00, 102.06it/s, accuracy=0.92]\n"
]
}
],
"source": [
"optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)\n",
"torch_target = torch.argmax(output_tensor, dim=1)\n",
"loss_fn = nn.CrossEntropyLoss()\n",
"\n",
"from tqdm import tqdm\n",
"trange = tqdm(range(1000))\n",
"predictions = []\n",
"accuracy_traj = []\n",
"loss_traj = []\n",
"for epoch in trange:\n",
" net.train()\n",
" logits = net(graph, input_tensor)\n",
" loss = loss_fn.forward(F.softmax(logits, dim=1), torch_target)\n",
"\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
" \n",
" loss_traj.append(float(loss.detach().numpy()))\n",
" \n",
" pred = torch.argmax(logits, dim=1)\n",
" predictions.append(pred.numpy())\n",
" \n",
" accuracy = float(torch.sum(pred == torch_target)) / len(input_tensor)\n",
" accuracy_traj.append(accuracy)\n",
" \n",
" trange.set_postfix(accuracy=accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'cross-entropy loss')"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(loss_traj)\n",
"plt.xlabel('iteration')\n",
"plt.xscale('log')\n",
"plt.ylabel('cross-entropy loss')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'accuracy')"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAd1ElEQVR4nO3deXhV5dnv8e9NEkiYAjJJEyAgYVKrYNCCwytOBbVaX63a2lpslarV1vfUVmud+trW9tKe2kGlHI+lk9OrnIKIiqKoFKuAojLFBEQIEJIwhiGQ4T5/ZGNDBrIzrKydrN/nunKZtZ611r7xyd6//azR3B0REYmuTmEXICIi4VIQiIhEnIJARCTiFAQiIhGnIBARiTgFgYhIxCWHXUBT9e3b17OyssIuQ0SkXVm2bFmJu/err63dBUFWVhZLly4NuwwRkXbFzD5tqE27hkREIk5BICIScQoCEZGIUxCIiERcYEFgZo+bWZGZrWig3czsd2aWb2Yfmtm4oGoREZGGBTkimAlMPkL7FCA79jMNeDTAWkREpAGBnT7q7m+aWdYRFrkY+ItX3wf7X2bWy8wGuvuWI21369atn/1+5pln1mm//PLLufHGG9m3bx/nn39+nfapU6cydepUSkpKuOyyy+q033DDDVxxxRVs3LiRb3zjG3Xaf/CDH/ClL32J3NxcvvOd79Rpv/POOznnnHNYvnw5t9xyS532X/ziF0ycOJHFixdzxx131Gl/6KGHOPHEE3n11Vf52c9+Vqf9j3/8IyNHjuT555/n17/+dZ32v/71rwwaNIinn36aRx+tm63PPvssffv2ZebMmcycObNO+7x58+jatSuPPPIIzzzzTJ32hQsXAvDggw8yd+7cw9rS0tJ48cUXAbjvvvtYsGDBYe19+vThueeeA+DHP/4xb7/99mHtmZmZ/O1vfwPglltuYfny5Ye1jxgxghkzZgAwbdo0Pv7448PaTzzxRB566CEAvv71r1NQUHBY+4QJE7j//vsBuPTSS9m2bdth7WeffTZ33XUXAFOmTGH//v2HtV944YXceuutgP729LcX3t9eEMI8RpABbKwxXRCbV4eZTTOzpWa2dM+ePW1SnIhIVFiQD6aJjQjmuvtx9bS9ANzv7oti0wuAH7n7siNtMycnx3VBmYhI05jZMnfPqa8tzBFBATCoxnQmsDmkWkREIivMIJgDXB07e+gLwK7Gjg+IiEjrC+xgsZk9CZwJ9DWzAuAeIAXA3acD84DzgXxgH3BNULWIiEjDgjxr6KuNtDvw3aBeX0RE4qMri0VEIk5BICIScQoCEZGIUxCIiEScgkBEJOIUBCIiEacgEBGJOAWBiEjEKQhERCJOQSAiEnGB3WJCRBJPRWUVW0sPhF2GNFOP1GR6pqa0+nYVBCIRcttzH/HcewWNLygJ6X+dO4LvnZ3d6ttVEIhEyKfb9pLdvzvXnT4s7FKkGY7N6BnIdhUEIhGya385w/t35/LxgxpfWCJDB4tFImR3WXkg+5ilfVMQiETI7v0V9EzTjgA5nIJAJCIOVlSxv7yS9DSNCORwCgKRiNhdVg5ATwWB1KIgEImI3ftjQaBjBFKLdhaKhOzjraXMXr4J92Bfpzh2IZl2DUltCgKRkE1fuJZZ728iJckCf61eXVM4pl/3wF9H2hcFgUjICnbu5+Sso3jm+glhlyIRpWMEIiHbvHM/n+uVGnYZEmEKApEQVVY5hbvK+FyvtLBLkQhTEIiEqKi0jIoqJ6O3gkDCoyAQCdHmnfsBNCKQUCkIREK0aWcZABkKAgmRgkAkRIdGBAPTdbBYwqPTR0VaYP7KQm6f9RGVVc27Gmx/eSU9U5Ppoat9JUQKApEWeG1NEQcrqrjspMxmb+OEQemtWJFI0ykIRFogd2spx2X05N6Ljg27FJFm0zECkWaqqnI+Lixl5IAeYZci0iIKApFm2rRzP3sPVjLy6GCeIyvSVhQEIs2UW1gKwMijdRM3ad8CDQIzm2xmuWaWb2a319OebmbPm9kHZrbSzK4Jsh6R1pS7tToIRmjXkLRzgQWBmSUBDwNTgDHAV81sTK3FvguscvcTgDOBX5tZ56BqEmlNuYWlZPRK06mf0u4FedbQyUC+u68DMLOngIuBVTWWcaCHmRnQHdgOVARYk0iDFueXsH3fwbiXX75xJyOP1mhA2r8ggyAD2FhjugA4pdYyfwDmAJuBHsAV7l5Ve0NmNg2YBjB48OBAipVoyy0s5WuPvdPk9S4d1/zrB0QSRZBBUN/jlmpffvlFYDlwFnAM8IqZveXuuw9byX0GMAMgJycn4Af6SRT9a902AJ647hT6de8S1zpmxtC+3YIsS6RNBBkEBcCgGtOZVH/zr+ka4Jfu7kC+mX0CjALeDbAukTreXb+dgempTBjWh+o9lSLREeRZQ0uAbDMbGjsAfCXVu4Fq2gCcDWBmA4CRwLoAaxKpw91Z8sl2xmcdpRCQSApsRODuFWZ2E/AykAQ87u4rzez6WPt04D5gppl9RPWupNvcvSSomkTqs2H7PopKDzB+6FFhlyISikDvNeTu84B5teZNr/H7ZuC8IGsQacy7n2wH4OQsBYFEk64slshbsn476WkpZPfXFcISTQoCibwl63cwPqs3nTrp+IBEk25DLZG0Yds+7p6zggPlVXxSspcrxw9qfCWRDkojAomkWe8X8MbHxVRUVXHa8L6cf/zAsEsSCY1GBBJJi/O3cdzn0vmf6yeGXYpI6DQikMjZe6CC9zfuYOLwPmGXIpIQFAQSOe+u3055pXPa8L5hlyKSEBQEEjmL80vonNSJnCG6bkAEFAQSQf/M38a4Ib1I65wUdikiCUFBIJGybc8BVm3Zrd1CIjXorCGJhF37ytm+7yCL8ooBmKggEPmMgkA6vLLySv7jwdfZua8cgJ6pyXw+Iz3kqkQSh4JAOrx3PtnOzn3lfO+s4Qzr153h/buTnKS9oiKHKAikw3t9TRGpKZ24cdJwUlN0gFikNn0tkg7N3XltTRETj+mrEBBpgIJAOrS1xXvZsH0fk0b1D7sUkYSlIJAO7fU1RQBMGtkv5EpEEpeCQDq019YUMWJAdzJ7dw27FJGEpSCQDmt3WTlL1m/XbiGRRigIpMNalFdCRZVz1kgFgciRKAikw3p19VbS01I4aUjvsEsRSWgKAumQKiqreG1NEWeN6q+Lx0QaoXeIdEhL1u9g575yzhszIOxSRBKegkA6pFdWbaVzcifOGKHTRkUaoyCQDsfdmb+qkNOG96VbF91FRaQxCgLpcNYUllKwY792C4nESUEgHc78lVsxg7NHKwhE4qEgkA5n/qpCxg3uTb8eXcIuRaRdUBBIh1K4q4yVm3dzrnYLicRNQSAdyopNuwAYn3VUyJWItB9xBYGZPWdmF5iZgkMSWl7RHgCG9+8eciUi7Ue8H+yPAl8D8szsl2Y2KsCaRJotr6iUo3umkp6WEnYpIu1GXEHg7q+6+1XAOGA98IqZLTaza8xM7zhJGHlb95A9QKMBkaaIe1ePmfUBpgLXAu8Dv6U6GF4JpDKRJqqqcvKL9mi3kEgTxXuMYBbwFtAV+JK7X+TuT7v7zUCD7zozm2xmuWaWb2a3N7DMmWa23MxWmtkbzflHiABs2rmf/eWVjBjQI+xSRNqVeK+//4O7v1Zfg7vn1DffzJKAh4FzgQJgiZnNcfdVNZbpBTwCTHb3DWamG8dLs+UVlQKQrRGBSJPEu2todOxDGwAz621mNzayzslAvruvc/eDwFPAxbWW+Rowy903ALh7UZz1iNSRt7X6jKHs/hoRiDRFvEFwnbvvPDTh7juA6xpZJwPYWGO6IDavphFAbzNbaGbLzOzq+jZkZtPMbKmZLS0uLo6zZImavKI99O/RhfSuOn9BpCniDYJOZmaHJmK7fTo3so7VM89rTScDJwEXAF8E7jKzEXVWcp/h7jnuntOvn24rLPXLK9IZQyLNEW8QvAw8Y2Znm9lZwJPAS42sUwAMqjGdCWyuZ5mX3H2vu5cAbwInxFmTyGfcnfytpdotJNIM8QbBbcBrwA3Ad4EFwI8aWWcJkG1mQ82sM3AlMKfWMrOB080s2cy6AqcAq+MtXuSQzbvK2HuwUiMCkWaI66whd6+i+uriR+PdsLtXmNlNVI8mkoDH3X2lmV0fa5/u7qvN7CXgQ6AKeMzdVzT1HyGSt/XQGUMaEYg0VVxBYGbZwP3AGCD10Hx3H3ak9dx9HjCv1rzptaYfAB6Is16Rev37jCGNCESaKt5dQ3+iejRQAUwC/gL8NaiiRJoqr6iUvt270LtbY+cwiEht8QZBmrsvAMzdP3X3e4GzgitLpGnyivZoNCDSTPEGQVnsFtR5ZnaTmV0C6CpgSQjVZwztYYQOFIs0S7xBcAvV9xn6HtXn/X8d+GZQRYk0xeZdZZQeqCBb9xgSaZZGDxbHLh673N1/COwBrgm8KpEmyC3cDcCooxUEIs3R6IjA3SuBk2peWSySSFZvqT51dISCQKRZ4r376PvAbDP7H2DvoZnuPiuQqkSaILewlIxeafRM1T2GRJoj3iA4CtjG4WcKOaAgkNDlFpZqt5BIC8R7ZbGOC0hCOlhRxdriPZw9WiexiTRXvFcW/4m6dw7F3b/V6hWJNMHa4j1UVDkjNSIQabZ4dw3NrfF7KnAJde8kKtJiZeWVVFQ53bvE96eZW1h9oHj0wJ5BliXSocW7a+i5mtNm9iTwaiAVSaRd/7dlbNqxn5dvOYNOnRo/UW1NYSkpScbQvt3aoDqRjineC8pqywYGt2YhIu9t2MHC3GLyivawYE18Ty3NLdzNMf26k5LU3D9lEYnr3WNmpWa2+9AP8DzVzygQaTW/X5BH764pfC49lcfeWhfXOmt0xpBIi8W7a0jvNAnURwW7eD23mFvPG0FqShI/e2E1HxXs4vjM9AbX2bWvnC27yhil4wMiLRLviOASM0uvMd3LzL4cXFkSNb9/LY+eqclcPTGLy8cPonuXZB5bdORRQW7sYTQ6Y0ikZeLdsXqPu+86NOHuO4F7gilJomb1lt3MX7WVqacOpWdqCj1TU7hi/CBe+HALm3fub3C9NbrHkEiriDcI6lsu3lNPRY7oD6/n071LMt86NeuzedecmkWVO39+e32D660pLKVnajJH90xtcBkRaVy8QbDUzP63mR1jZsPM7DfAsiALk2jILypl3kdbuHrCEHp1/ffTxTJ7d2XK8QN54p0N7D1QUe+6uYWljBrYE90PUaRl4v1WfzNwF/B0bHo+cGcgFUmkPPL6WlKTk/j2aUPrtF172lBe+HALNz3xHoOO6lqnfdXm3XwlJ7MtyhTp0OI9a2gvcHvAtUjElJVX8sJHW7g8ZxB9unep0z52cG/OP/5o3l67jeUbd9Zp79YlmUmjdI8hkZaK915DrwBfiR0kxsx6A0+5+xeDLE46tqXrd3CgooqzjvBh/shVJ7VhRSLRFO8xgr6HQgDA3XegZxZLC72VX0xKknHKsKPCLkUk0uINgioz++yWEmaWRT13IxVpirc+LmHc4N507awT0ETCFO878CfAIjN7IzZ9BjAtmJIkCkr2HGDVlt3cet6IsEsRibx4Dxa/ZGY5VH/4LwdmAw1f6SPSiH/mlwBwWna/kCsRkXgPFl8LfB/IpDoIvgC8zeGPrhSJ26K8EtLTUjg+o+F7CYlI24j3GMH3gfHAp+4+CRgLFAdWlXRo7s6i/BJOHd6HpDieOSAiwYr3GEGZu5eZGWbWxd3XmNnIQCvrINydG//+HvNXbQ27lDZ33pgBPHLVuDpX/q4t3suWXWXcPFy7hUQSQbxBUGBmvYB/AK+Y2Q70qMq4zPlgMy+uKOSSsRlk9EoLu5w2s3nnfma9v4l/LN/EJWMPv/p3UV71YPL07L5hlCYitcR7sPiS2K/3mtnrQDrwUmBVdRB7DlTw8xdW8/nMdB78ygmR2g1SVeWsLdnLz19Yw1mjBpCelvJZ26L8Eob06VrvbSNEpO01+fl+7v6Gu89x94NBFNSR/P61PIpKD/DTi46NVAgAdOpk/Ozi49i29wC/eeXjz+aXV1bx9tptnDZcowGRRKEHvQZkbfEeHl/0CV85KZOxg3uHXU4ojs9M5+unDOEvb69n5ebqx1m8v2Enew9WareQSAJREATA3bl3zkpSk5P40eRRYZcTqlvPG0nvrp25e/ZKqqqcRXnFdDKYcIyCQCRRBBoEZjbZzHLNLN/MGrx7qZmNN7NKM7ssyHrayvxVW3krr4T/OncE/XrUvatmlKR3TeH2KaNY9ukOnn2vgLfySzhhUK/DjhmISLgCCwIzSwIeBqYAY4CvmtmYBpb7FfByULW0pbLySu6bu4qRA3pw9YQhYZeTEC4dl8lJQ3pz/7zVfLBxJ6fr+IBIQglyRHAykO/u62IHlp8CLq5nuZuB54CiAGtpM9PfWEvBjv3ce9GxJCdpzxtUHzi+7+Lj2LW/nCrXbSVEEk2Qn1QZwMYa0wWxeZ8xswzgEmD6kTZkZtPMbKmZLS0uTtwLmjdu38ejC9dy4ecHMuGYPmGXk1DGfK4n150+jH49ujB2cK+wyxGRGoIMgvrOl6x96+qHgNvcvfJIG3L3Ge6e4+45/fol7rfJ++auopMZP7lgdNilJKTbp4zirR9NIkUjJZGEEuSN4AuAQTWmM6l7NXIO8FTsFgR9gfPNrMLd/xFgXYF44+Ni5q/ayg+/OJKB6dG5grgpzIzUlKSwyxCRWoIMgiVAtpkNBTYBVwJfq7mAu3/2xHIzmwnMbY8hcLCiip/OWUlWn65ce3rdh7CLiCSywILA3SvM7CaqzwZKAh5395Vmdn2s/YjHBdqTP/3zE9aV7OVPU8fTJVnfeEWkfQn0GYHuPg+YV2tevQHg7lODrCUohbvK+N2CPM4Z3Z9JR3gIu4hIotJRuxa6/8XVlFc5d11Y5xIJEZF2QUHQAu+s28bs5Zv5zhnDGNKnW9jliIg0i4KgmSoqq7hnzkoyeqVx45nDwy5HRKTZFATN9MS7G1hTWMqdF4wmrbMOEItI+6UgaIZtew7w4Mu5nDq8D5OPOzrsckREWkRB0AwPvJzLvoOV3PulY+s8j1dEpL1REDTRBxt38vTSjUydmEX2gB5hlyMi0mIKgiaoqnLunrOSPt268P1zssMuR0SkVSgImuDZ9wr4YONO7jh/FD1S9WAVEekYFARx2rW/nF+9uIaThvTmkrEZja8gItJOBHqLiY7kN698zPZ9B/nzRSfrALGIdCgaEcRhTeFu/vqvT7nqlMEcl5EedjkiIq1KQdAId+ee2SvpkZrMD84dGXY5IiKtTkHQiLkfbuGdT7bzwy+OpHe3zmGXIyLS6hQER7D3QAU/f2E1x2X05Mrxg8MuR0QkEDpYfAR/eD2fwt1lPHzVWJI66QCxiHRMGhE0YF3xHh57ax2XjsvkpCFHhV2OiEhgFAT1cHf+e+4quiQncdsUHSAWkY5NQVCPBauLWJhbzC3nZNO/R2rY5YiIBEpBUEtZeSU/nbuS7P7d+ebErLDLEREJnA4W1zLjzXVs3L6fJ649hZQk5aSIdHz6pKuhYMc+HlmYzwXHD2Ti8L5hlyMi0iYUBDX8/IXVANxxweiQKxERaTsKgphFeSW8uKKQmyYNJ6NXWtjliIi0GQUBcLCiinvmrGBIn65ce/qwsMsREWlTCgLgz4vXs7Z4L3dfOIbUlKSwyxERaVORD4Ki3WX8dkEeZ43qz9mjB4RdjohIm4t8EPzyxTUcrKji7gvHhF2KiEgoIh0ES9dvZ9b7m7jujKFk9e0WdjkiIqGIbBBUVjl3z17JwPRUvjtpeNjliIiEJrJB8MS7G1i1ZTc/uWA0XTvrAmsRia5IBsGOvQf59fxcJgzrwwXHDwy7HBGRUEUyCB6Yn0tpWQU/vfhYzPTAGRGJtsgFwYpNu3jy3Q18c0IWIwb0CLscEZHQBRoEZjbZzHLNLN/Mbq+n/Soz+zD2s9jMTgiynqoq5+7ZK+jTrTO3nJsd5EuJiLQbgQWBmSUBDwNTgDHAV82s9sn6nwD/4e6fB+4DZgRVD8Cs9zfx3oad3DZ5FD1TU4J8KRGRdiPI02VOBvLdfR2AmT0FXAysOrSAuy+usfy/gMzGNrpt70H+8vb6JhfjDr9/LZ+xg3tx6bhGX0ZEJDKCDIIMYGON6QLglCMs/23gxfoazGwaMA2g89HDuXv2ymYV1L1LMv990XF06qQDxCIihwQZBPV92nq9C5pNojoITquv3d1nENttdOK4k3zBnec0q6C0zkm6ZkBEpJYgPxULgEE1pjOBzbUXMrPPA48BU9x9W2MbTe5k9OnepdWKFBGJuiDPGloCZJvZUDPrDFwJzKm5gJkNBmYB33D3jwOsRUREGhDYiMDdK8zsJuBlIAl43N1Xmtn1sfbpwN1AH+CR2IVdFe6eE1RNIiJSl7nXu9s+YeXk5PjSpUvDLkNEpF0xs2UNfdGO3JXFIiJyOAWBiEjEKQhERCJOQSAiEnEKAhGRiFMQiIhEnIJARCTiFAQiIhGnIBARiTgFgYhIxCkIREQiTkEgIhJxCgIRkYhTEIiIRJyCQEQk4hQEIiIRpyAQEYk4BYGISMQpCEREIk5BICIScQoCEZGIUxCIiEScgkBEJOIUBCIiEacgEBGJOAWBiEjEKQhERCJOQSAiEnEKAhGRiFMQiIhEnLl72DU0iZkVA5/W05QO7GpkXl+gJKDSGlNffW2xnXiXb2y5I7U31BZPn0B4/RJWnzRlndbul3j7Su+V5i+XqO+VIe7er94Wd+8QP8CMxuYBSxOpvrbYTrzLN7bckdobaounT8Lsl7D6JMx+ibev9F5puz5pSl8F1S8dadfQ83HOC0tr1dLU7cS7fGPLHam9oTb1ScvXae1+aUpfhUXvlfhep9W0u11DLWFmS909J+w65HDql8SjPklMQfVLRxoRxGNG2AVIvdQviUd9kpgC6ZdIjQhERKSuqI0IRESkFgWBiEjEKQhERCIu0kFgZt3M7M9m9n/M7Kqw65FqZjbMzP6vmT0bdi1Szcy+HHufzDaz88KuR8DMRpvZdDN71sxuaMm2OlwQmNnjZlZkZitqzZ9sZrlmlm9mt8dm/yfwrLtfB1zU5sVGSFP6xd3Xufu3w6k0OprYJ/+IvU+mAleEUG4kNLFPVrv79cDlQItOKe1wQQDMBCbXnGFmScDDwBRgDPBVMxsDZAIbY4tVtmGNUTST+PtF2sZMmt4nd8baJRgzaUKfmNlFwCJgQUtetMMFgbu/CWyvNftkID/2TfMg8BRwMVBAdRhAB/x/kUia2C/SBprSJ1btV8CL7v5eW9caFU19n7j7HHefCLRo13ZUPvwy+Pc3f6gOgAxgFnCpmT1KYl1iHxX19ouZ9TGz6cBYM/txOKVFVkPvlZuBc4DLzOz6MAqLsIbeJ2ea2e/M7I/AvJa8QHJLVm5HrJ557u57gWvauhj5TEP9sg3Qh004GuqT3wG/a+tiBGi4TxYCC1vjBaIyIigABtWYzgQ2h1SL/Jv6JfGoTxJP4H0SlSBYAmSb2VAz6wxcCcwJuSZRvyQi9UniCbxPOlwQmNmTwNvASDMrMLNvu3sFcBPwMrAaeMbdV4ZZZ9SoXxKP+iTxhNUnuumciEjEdbgRgYiINI2CQEQk4hQEIiIRpyAQEYk4BYGISMQpCEREIk5BIJFlZotj/80ys6+18rbvqO+1RBKRriOQyDOzM4Fb3f3CJqyT5O4N3rrczPa4e/fWqE8kaBoRSGSZ2Z7Yr78ETjez5Wb2X2aWZGYPmNkSM/vQzL4TW/5MM3vdzJ4APorN+4eZLTOzlWY2LTbvl0BabHt/r/lasds5P2BmK8zsIzO7osa2F8aeNrXGzP5uZvXdbEyk1UXl7qMiR3I7NUYEsQ/0Xe4+3sy6AP80s/mxZU8GjnP3T2LT33L37WaWBiwxs+fc/XYzu8ndT6zntf4TOBE4AegbW+fNWNtY4Fiqbyj2T+BUqh86IhIojQhE6joPuNrMlgPvAH2A7FjbuzVCAOB7ZvYB8C+q7xCZzZGdBjzp7pXuvhV4AxhfY9sF7l4FLAeyWuVfI9IIjQhE6jLgZnd/+bCZ1ccS9taaPgeY4O77zGwhkBrHthtyoMbvlej9KW1EIwIRKAV61Jh+GbjBzFIAzGyEmXWrZ710YEcsBEYBX6jRVn5o/VreBK6IHYfoB5wBvNsq/wqRZtI3DhH4EKiI7eKZCfyW6t0y78UO2BYDX65nvZeA683sQyCX6t1Dh8wAPjSz99y95vNk/x8wAfgAcOBH7l4YCxKRUOj0URGRiNOuIRGRiFMQiIhEnIJARCTiFAQiIhGnIBARiTgFgYhIxCkIREQiTkEgIhJx/x88NnxOlxgCCgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(accuracy_traj)\n",
"plt.hlines(1.0,0,len(accuracy_traj), linestyles='--')\n",
"plt.xscale('log')\n",
"plt.xlabel('iteration')\n",
"plt.ylabel('accuracy')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:dgl]",
"language": "python",
"name": "conda-env-dgl-py"
},
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment