Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
beta-vae-normalizing-flows
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kaan Güney Keklikçi
beta-vae-normalizing-flows
Commits
290b0e16
Commit
290b0e16
authored
Aug 06, 2021
by
Kaan Güney Keklikçi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
planar flow initial algorithm performance
parent
547dae16
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
221 additions
and
0 deletions
+221
-0
planar_execute.ipynb
multivariate/planar_execute.ipynb
+221
-0
No files found.
multivariate/planar_execute.ipynb
0 → 100644
View file @
290b0e16
{
"cells": [
{
"cell_type": "code",
"execution_count": 23,
"id": "d0b0b61a",
"metadata": {},
"outputs": [],
"source": [
"import os \n",
"os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' \n",
"import numpy as np\n",
"from sklearn.preprocessing import StandardScaler\n",
"import tensorflow as tf\n",
"tf.compat.v1.disable_eager_execution() \n",
"import tensorflow_probability as tfp\n",
"import matplotlib.pyplot as plt\n",
"from data_loader import load_data\n",
"from data_preprocesser import preprocess_data\n",
"from planar import Planar"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "1cdadc8a",
"metadata": {},
"outputs": [],
"source": [
"def train(session, loss, optimizer, steps=int(1e5)):\n",
" \n",
" \"\"\" optimize for all dimensions \"\"\"\n",
" \n",
" recorded_steps = []\n",
" recorded_losses = []\n",
" for i in range(steps):\n",
" _, loss_per_iteration = session.run([optimizer, loss])\n",
" if i % 100 == 0:\n",
" recorded_steps.append(i)\n",
" recorded_losses.append(loss_per_iteration)\n",
" if i % int(1e4) == 0:\n",
" print('Iteration {iteration}: {loss}'.format(iteration=i,loss=loss_per_iteration))\n",
" return recorded_losses\n",
"\n",
"def plot_results(recorded_losses):\n",
" \n",
" \"\"\" plot loss \"\"\"\n",
" print('Displaying results...')\n",
" fig = plt.figure(figsize=(10,5))\n",
" x = np.arange(len(recorded_losses))\n",
" y = recorded_losses\n",
" m, b = np.polyfit(x, y, 1) \n",
" plt.scatter(x, y, s=10, alpha=0.3)\n",
" plt.plot(x, m*x+b, c=\"r\")\n",
" plt.title('Loss per 100 iteration')\n",
" plt.xlabel('Iteration')\n",
" plt.ylabel('Loss')\n",
" plt.tight_layout()\n",
" plt.show()\n",
" \n",
"def create_tensor(data, batch_size):\n",
" dataset = tf.data.Dataset.from_tensor_slices(data.astype(np.float32))\n",
" dataset = dataset.repeat()\n",
" dataset = dataset.shuffle(buffer_size=data.shape[0])\n",
" dataset = dataset.prefetch(2*batch_size)\n",
" dataset = dataset.batch(batch_size)\n",
" data_iterator = tf.compat.v1.data.make_one_shot_iterator(dataset)\n",
" samples = data_iterator.get_next()\n",
" return samples\n",
"\n",
"\"\"\" \n",
"if any error on tensorflow is displayed claiming tf.float32 is not displayed,\n",
"do the following (one of them is probably enough)\n",
" ** downgrade keras to 2.3.1\n",
" ** replace tf.float32 with np.float32\n",
"\"\"\"\n",
"def check_version(): \n",
" print(f'Tensorflow version: {tf.__version__}')\n",
" print(f'Tensorflow-probability version: {tfp.__version__}')\n",
" print(f'Keras version: {tf.keras.__version__}\\n')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "614d6266",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data successfully loaded...\n",
"\n",
"Data successfully preprocessed...\n",
"\n",
"Optimizer and loss successfully defined...\n",
"\n",
"Iteration 0: 64.1279296875\n",
"Iteration 10000: 52.881797790527344\n",
"Iteration 20000: 51.743141174316406\n",
"Iteration 30000: 47.98585510253906\n",
"Iteration 40000: 50.93796157836914\n",
"Iteration 50000: 49.826751708984375\n",
"Iteration 60000: 52.95922088623047\n",
"Iteration 70000: 52.14543533325195\n",
"Iteration 80000: 52.07572555541992\n",
"Iteration 90000: 48.31324768066406\n",
"Training finished...\n",
"\n",
"Displaying results...\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAB/tklEQVR4nO29eZgkVZnv/43Iraqysvalu+mmqW56YbEVENQBxHWUER5EQUWmdcSrIrhdnVFkQPABURx1HsUZlzvjvVx0XAa56nW5XsXhAoro8GNroBtomoamu6tr66qsrKxcIs7vj6zIioyKPSMyI7O+n+fxkc7KjDgR55z3fM973vMeSQghQAghhBBCCAEAyM0uACGEEEIIIVGCApkQQgghhBAdFMiEEEIIIYTooEAmhBBCCCFEBwUyIYQQQgghOiiQCSGEEEII0UGBTAhZFRw4cACnnHJKs4sRGPfeey8uuOCCms/uuusunH/++XjDG96Aj3zkI5ifnwcAKIqCG2+8EW984xvx+te/Ht///vdNr/nVr34VP/nJTwAAX//61/Hb3/420DJfdtllmJ6eBgC8733vw9NPPx3o9QkhJCgokAkhpIVYXFzEP/7jP+JjH/sYFEWpfj49PY1Pf/rTuOWWW/DrX/8aGzZswJe+9CUAwA9+8APs378fP//5z3H77bfj1ltvxSOPPLLi2h/96Efx5je/GQBw//33o1wuB1r23//+99X//m//7b/h+OOPD/T6hBASFPFmF4AQQppNNpvFZz/7WezevRuSJOHss8/Gxz/+ccTjcXzta1/Db37zGyQSCfT39+Pzn/88RkZGLD/Xc9VVV0GSJOzduxfT09M488wzcc011yCRSGDv3r343Oc+h6NHj0JRFOzcuRMXXXQR7r//fnzuc59DV1cXFhYWcPvttyOZTFavee+99yKfz+Omm27C1772tZrPX/SiF+G4444DAFxyySW44IILcN111+G3v/0t3va2tyEej6O3txdvetOb8LOf/Qw7duxYUd4tW7ago6MDu3btwhe/+EXEYjGcc845+NKXvoQ///nPUBQFJ554Iq655hp0d3fjNa95DXbs2IE9e/ZU39m3vvUtFItFTE9P481vfjM+9rGP4dOf/jQA4N3vfje+/e1v49JLL8VXv/pVvOhFL8IPf/hD3HbbbZBlGUNDQ7j22msxNjaGq666Ct3d3dizZw8OHz6MTZs24Stf+QrS6XRILYEQQirQg0wIWfXceOON6Ovrw//+3/8bP/7xj7Fnzx585zvfwaFDh3Drrbfixz/+Me644w6ceeaZeOSRRyw/N2P37t347//9v+OXv/wl9u7dix/+8Icol8v4yEc+gk984hO444478N3vfhff+c538NBDDwEAnnrqKXz5y1/Gz372sxpxDACve93rcPXVV6O3t7fm88OHD2PNmjXVf69Zswbz8/PI5XI4dOgQ1q5dW/O3w4cPW76PSy+9FCeffDI++clP4vWvfz2+/e1vIxaL4Y477sDPfvYzjIyMVL3TALBlyxb86le/wute9zp85zvfwRe+8AXccccd+OEPf4hvf/vbmJ6exuc//3kAwK233lpTlvvuuw//8i//gv/5P/8nfvazn+G8887DlVdeCe2Q1127duFf//Vf8ctf/hJHjhzB//k//8euKgkhJBDoQSaErHruvvtufP/734ckSUgmk3jHO96BW2+9Ff/lv/wXbN++HRdeeCFe+cpX4pWvfCVe8YpXQFVV08/NuPDCC6sezwsuuAB33nknXv7yl+O5557D1VdfXf3e4uIiHn/8cWzevBlr167FMccc4+kZVFU1/VyW5arYNH7ulrvuugvZbBZ/+MMfAAClUgmDg4PVv7/0pS8FAEiShG9+85u466678POf/xx79+6FEAL5fN7y2vfccw/+6q/+CgMDAwCAt7zlLfjc5z6HAwcOAADOPvvs6iRh69atmJ2ddV1uQgjxCwUyIWTVYxSXqqqiXC5DlmV897vfxaOPPor77rsPN910E172spfhmmuusfzcSCwWq/63EAKyLENRFPT09OCnP/1p9W+Tk5PIZDJ46KGH0NXV5fkZ1q5di4cffrj67/HxcfT29qKrqwtr167FxMREzd/03mYnVFXF1VdfjXPOOQcAkMvlUCgUqn/XyruwsIALL7wQr3vd6/DSl74Ub33rW/Hb3/7WVKBrmP1NCFGNf+7o6Kh+LkmS7bUIISQoGGJBCFn1nHXWWfje974HIQSKxSJ+9KMf4S/+4i+we/dunHfeedi8eTM+8IEP4G/+5m+wZ88ey8/N+NWvfoVisYhCoYD/9b/+F1796ldjbGwMqVSqKpAPHTqE8847D7t27arrGR5++GE8++yzACob81772tcCAF772tfixz/+Mcrl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6lOfqvEmsY5bn76+PmzatAnJZBKbNm1CKpXC4cOHq39nHbcH/+N//A+cddZZ+MQnPoFDhw7h3e9+N0qlUvXvrOf2QR9D7FSvZt9tWDkbdqcW4NRTT8Xdd98NAHjooYewdevWJpeI1MPk5CQuu+wy/N3f/R0uuugiAMCJJ56I+++/HwBw991346UvfSlOPfVU3HvvvVBVFQcPHoSqqhgYGGhm0YlLvve97+G73/0ubrvtNpxwwgm4+eab8cpXvpJ13EacdtppuOeeeyCEwPj4OPL5PF7xilewjtuMnp6eqtDt7e1FuVymvW5TvNSr2XcbhSSEEA27W8TRslg8+eSTEELgpptuwubNm5tdLOKTG2+8Eb/61a+wadOm6md///d/jxtvvBGlUgmbNm3CjTfeiFgshltuuQV33303VFXFpz/96YZ2QhIMO3fuxPXXXw9ZlnHttdeyjtuIL37xi7j//vshhMB//a//FevXr2cdtxm5XA5XX301JiYmUCqV8K53vQsnn3wy67lNOHDgAD7+8Y/jRz/6Efbt2+e6Xq2+2wgokAkhhBBCCNHBEAtCCCGEEEJ0UCATQgghhBCigwKZEEIIIYQQHRTIhBBCCCGE6KBAJoQQQgghRAcFMiGENJFt27YBALLZLK644orArrtz587qf19wwQWBXZcQQlYDFMiEEBIBZmdnsXv37sCu96c//an63z/96U8Duy4hhKwGeI4yIYREgBtvvBFHjhzBlVdeiX/6p3/CT37yE9x6661QVRUnnXQSrrvuOqRSKbz85S/HSSedhMnJSdx+++347Gc/i6eeegqTk5MYGxvD17/+dXzpS18CAFx88cX493//d2zbtg179uxBPp/HNddcgz179kCSJLz3ve/Fm9/8Ztxxxx245557MDs7i+effx5nnnkmrr/++ua+EEIIaSL0IBNCSAS45pprMDIygn/6p3/CU089hR/96Ef4wQ9+gJ/+9KcYHBzEv/7rvwIAZmZm8P73vx8//elP8dBDDyGRSOCHP/whfvOb36BQKOD//b//h2uuuQYA8O///u8197jlllvQ39+Pn//857j11ltxyy23VL3WDz74IL72ta/hZz/7Gf7jP/4De/bsaewLIISQCEEPMiGERIz7778f+/fvx9ve9jYAQKlUwoknnlj9+4tf/GIAwOmnn46+vj5873vfwzPPPINnn30WCwsLltf94x//iJtuugkAMDAwgNe+9rX405/+hO7ubpxyyino7u4GAGzYsAGzs7NhPR4hhEQeCmRCCIkYiqLg3HPPrXqCc7kcFEWp/r2jowMAcOedd+JrX/sa3vWud+Etb3kLZmZmIISwvK7xb0KI6nVTqVT1c0mSbK9DCCHtDkMsCCEkAsTjcZTLZQDAy172MvzmN7/B1NQUhBC4/vrrceutt674zX333Ydzzz0Xb33rWzE0NIQ///nPVcEbi8Wq19N4+ctfjttvvx0AMD09jTvvvBNnnHFGyE9GCCGtBwUyIYREgMHBQaxbtw47d+7E9u3b8aEPfQjvfve78aY3vQmqquL973//it9cfPHF+MUvfoE3v/nN+PCHP4yXvOQlOHDgAADgta99LS644AIUCoXq96+88kocPXoU559/Pv76r/8al19+OU466aSGPSMhhLQKkuA6GiGEEEIIIVXoQSaEEEIIIUQHBTIhhBBCCCE6KJAJIYQQQgjRQYFMCCGEEEKIDgpkQgghhBBCdFAgE0IIIYQQooMCmRBCCCGEEB3/PyYxlOR6ko3/AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def main():\n",
" \n",
" \"\"\" load data \"\"\"\n",
"\n",
" filename = 'prostate.xls'\n",
" directory = '/Users/kaanguney.keklikci/Data/'\n",
"\n",
" loader = load_data(filename, directory)\n",
" loader.create_directory(directory)\n",
" data = loader.read_data(directory, filename)\n",
" print('Data successfully loaded...\\n')\n",
" \n",
" \"\"\" preprocess data \"\"\"\n",
"\n",
" fillna_vals = ['sz', 'sg', 'wt']\n",
" dropna_vals = ['ekg', 'age']\n",
" drop_vals = ['patno', 'sdate']\n",
"\n",
" preprocesser = preprocess_data(StandardScaler(), fillna_vals, dropna_vals, drop_vals)\n",
" data = preprocesser.dropna_features(data)\n",
" data = preprocesser.impute(data)\n",
" data = preprocesser.drop_features(data)\n",
" data = preprocesser.encode_categorical(data)\n",
" data = preprocesser.scale(data)\n",
" print('Data successfully preprocessed...\\n')\n",
" \n",
" \"\"\" set Planar parameters \"\"\"\n",
" \n",
" tfd = tfp.distributions\n",
" tfb = tfp.bijectors\n",
"\n",
" batch_size = 32\n",
" dtype = np.float32\n",
" layers = 2\n",
" dims = data.shape[1]\n",
" # multivariate normal for base distribution\n",
" base_dist = tfd.MultivariateNormalDiag(loc=tf.zeros(shape=dims, dtype=dtype))\n",
" learning_rate = 1e-4\n",
" \n",
" \"\"\" initialize samples \"\"\"\n",
" samples = create_tensor(data, batch_size)\n",
" \n",
" \"\"\" make Planar \"\"\"\n",
"\n",
" bijectors = []\n",
" for i in range(0, layers):\n",
" bijectors.append(PlanarFlow(input_dimensions=dims, case='density_estimation'))\n",
" bijector = tfb.Chain(bijectors=list(reversed(bijectors)), name='chain_of_planar')\n",
" planar_flow = tfd.TransformedDistribution(\n",
" distribution=base_dist,\n",
" bijector=bijector\n",
" )\n",
"\n",
" loss = -tf.reduce_mean(planar_flow.log_prob(samples))\n",
" optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate).minimize(loss)\n",
"\n",
" session = tf.compat.v1.Session()\n",
" tf.compat.v1.set_random_seed(42)\n",
" session.run(tf.compat.v1.global_variables_initializer())\n",
" print('Optimizer and loss successfully defined...\\n')\n",
" \n",
" \"\"\" start training \"\"\"\n",
" recorded_losses = train(session, loss, optimizer)\n",
" print('Training finished...\\n')\n",
" \n",
" \"\"\" display results \"\"\"\n",
" plot_results(recorded_losses)\n",
" \n",
" \n",
"if __name__ == \"__main__\":\n",
" main()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment