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
154e756a
Commit
154e756a
authored
Jul 26, 2021
by
Kaan Güney Keklikçi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
maf in jupyter notebook, modular implementation
parent
90098d94
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
205 additions
and
0 deletions
+205
-0
maf_execute.ipynb
multivariate/maf_execute.ipynb
+205
-0
No files found.
multivariate/maf_execute.ipynb
0 → 100644
View file @
154e756a
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"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",
"\n",
"import tensorflow as tf\n",
"tf.compat.v1.disable_eager_execution() \n",
"import tensorflow_probability as tfp\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from data_loader import load_data\n",
"from data_preprocesser import preprocess_data\n",
"from maf import MAF "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data successfully loaded...\n",
"\n",
"Data successfully preprocessed...\n",
"\n",
"TensorFlow version: 2.5.0\n",
"Number of dimensions: 37\n",
"Learning rate: 0.0001\n",
"\n",
"Successfully created model...\n",
"\n",
"Optimizer and loss successfully defined...\n",
"\n",
"Iteration 0: 52.72296142578125\n",
"Iteration 10000: -12.123727798461914\n",
"Iteration 20000: -31.257366180419922\n",
"Iteration 30000: -19.52370834350586\n",
"Iteration 40000: -34.72262954711914\n",
"Iteration 50000: -37.22956085205078\n",
"Iteration 60000: -31.837202072143555\n",
"Iteration 70000: -36.162353515625\n",
"Iteration 80000: -40.44646453857422\n",
"Iteration 90000: -39.50082015991211\n",
"Training finished...\n",
"\n",
"Displaying results...\n"
]
},
{
"data": {
"image/png": "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z3zmM0v+ZmxsDAsLC7j11lvxohe9CL/4xS/yf+Ncpn29v/vd7+arW9x///2oqalBR0fHsvcFEdFycASZiC5IyWRySam3f/mXf8Htt9+Ou+66C6985SuRzWZx/fXX413vehf8fj9uvvlmvO51r0M4HEYwGMTtt9+OPXv2uP7cTTAYxFve8hbMz8/jpS99KV73utdBlmX8zd/8De6++278/d//PXRdx/vf/35cfvnlePzxx5e1bfX19fjEJz6B973vfchms2hvb8c999wDIDdh7/jx43jVq16FbDaL3/md38FVV11VdHm/+Zu/iXvuuQfZbBbvfve7cc899+A1r3kNDMPARRddhI985CNL/qa/vx8vfOELcfPNN6Oqqgrt7e3o6enB2NgY2tvbcdNNN+Etb3kL/uZv/ib/N9deey3e/va3421vextM00RdXR0+//nPV5QCQkS0GiTBZ1RERGvOqgrxe7/3exu9KkREVAJvy4mIiIiIbDiCTERERERkwxFkIiIiIiIbBshERERERDZbsorF5GR8Q963tjaMmZnkhrw3rT0e3+2Px3h74/Hd3nh8t7eNOr6NjTHXn3MEuQKqqpR+EW1ZPL7bH4/x9sbju73x+G5vm+34MkAmIiIiIrJhgExEREREZMMAmYiIiIjIhgEyEREREZENA2QiIiIiIhsGyERERERENgyQiYiIiIhsGCATEREREdkwQCYiIiIismGATERERERkwwC5TKYpMLeQgWmKjV4VIiIiIlpD6kavwFZgmgKHRqcQCgWQSmWwr7Mesixt9GoRERER0RrgCHIZEmkNWtaEqsrQsiYSmexGrxIRERERrREGyGWIBP3w+2Tougm/T0Yk4NvoVSIiIiKiNcIUizLIsoR9nfUIRQJIJTJMryAiIiLaxjiCXCZZllAVDRQNjk1TIJ7kRD4iIiKirYwjyKvEmsinZXNpGJzIR0RERLQ1cQR5leQn8imcyEdERES0lTFAXiX5iXwGJ/IRERERbWVMsaiAsZhjHAn6l6RPWBP5EpksIgEf0yuIiIiItigGyGUyTYEnj5zF5NSCZ46xLEuIhfwbtIZEREREtBqYYlGmXI6xwRxjIiIiom2OAXKZcjnGCnOMiYiIiLY5pliUSZYl7O9rxJERgcaqEHOMiYiIiLYpjiCXyTQFnhmcxKmzCRwem2YzECIiIqJtigFy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5xCkXHtxq4a1lf5hpYU4f76dcQSZiIhoC9qsk7Bo63CeQ7GQ3zX9Y6Mrk2wEBshERERb0IUYtNDq8jqH3NInZFlCJOC7YHLeGSATERFtUZsll5W2rnLPoQst5505yEREdEEzTYF4MgPTFBu9KkQbqthnYbk571v188URZCIiumBdaKNiRF5KfRaWk/O+lT9fDJCJiOiCdSGWryJyU+qzsJyc9638+WKKBRERXbAuxPJVRG7K+SxY+crljgJv5c8XR5CJiOiCxUoQRDlr8VnYyp8vBshERHRBYyUIopy1+Cxs1c8XUyyIiIiIiGwYIBMRERER2TBAJiIiIiKyYYBMRERERGTDAJmIiIiIyIYBMhERERGRDQNkIiIiIiIbBshERERERDYMkImIiIiIbBggExERERHZSEIIsdErQURERES0WXAEmYiIiIjIhgEyEREREZENA2QiIiIiIhsGyERERERENgyQiYiIiIhsGCATEREREdkwQCYiIiIislE3egW2AtM0ceedd2JgYAB+vx933XUXOjo6Nnq1qELZbBa33XYbTp06BU3T8Ad/8Afo6enBRz7yEUiShN7eXtxxxx2QZRmf+9zn8JOf/ASqquK2227D/v37N3r1qUxTU1N47Wtfiy9+8YtQVZXHd5v5/Oc/jx/96EfIZrN485vfjKuuuorHeJvIZrP4yEc+glOnTkGWZfz5n/85P8PbxNNPP41PfepT+NKXvoSxsbGyj6nXa9eFoJK+//3viw9/+MNCCCGefPJJ8a53vWuD14iW4xvf+Ia46667hBBCzMzMiBtvvFH8/u//vnjssceEEEJ89KMfFf/5n/8pDh06JG655RZhmqY4deqUeO1rX7uRq00V0DRNvPvd7xa/9Vu/JYaHh3l8t5nHHntM/P7v/74wDEMsLCyIz372szzG28gPfvAD8b73vU8IIcTDDz8s3vve9/L4bgNf+MIXxCte8Qrxhje8QQghKjqmbq9dL0yxKMMTTzyB66+/HgBw4MABHDp0aIPXiJbjZS97Gd7//vcDAIQQUBQFzz33HK666ioAwA033IBHHnkETzzxBK677jpIkoTW1lYYhoHp6emNXHUq0z333IM3velNaGpqAgAe323m4YcfRl9fH97znvfgXe96F174whfyGG8jnZ2dMAwDpmliYWEBqqry+G4D7e3tuPfee/P/ruSYur12vTBALsPCwgKi0Wj+34qiQNf1DVwjWo5IJIJoNIqFhQW8733vw6233gohBCRJyv8+Ho8vOd7Wz2lze+CBB1BXV5e/mQXA47vNzMzM4NChQ/irv/orfOxjH8Mf/dEf8RhvI+FwGKdOncLNN9+Mj370o7jlllt4fLeBl770pVDV8xm9lRxTt9euF+YglyEajSKRSOT/bZpmwcGmrePMmTN4z3veg7e85S145StfiU9+8pP53yUSCVRVVS053olEArFYbCNWlypw//33Q5IkPProo3j++efx4Q9/uGBUicd366upqUFXVxf8fj+6uroQCAQwPj6e/z2P8db2f//v/8V1112HD37wgzhz5gze9ra3IZvN5n/P47s92HOISx1Tt9eu23qu2zttYZdddhkeeughAMBTTz2Fvr6+DV4jWo5z587hHe94Bz70oQ/h9a9/PQBg7969ePzxxwEADz30EK644gpcdtllePjhh2GaJk6fPg3TNFFXV7eRq05l+MpXvoIvf/nL+NKXvoSLLroI99xzD2644QYe323k8ssvx89+9jMIITAxMYFUKoUXvOAFPMbbRFVVVT7Qra6uhq7r/I7ehio5pm6vXS+SEEKs27ttUVYVi8HBQQgh8PGPfxzd3d0bvVpUobvuugvf+9730NXVlf/Zn/7pn+Kuu+5CNptFV1cX7rrrLiiKgnvvvRcPPfQQTNPEn/zJn6zrh5JW7pZbbsGdd94JWZbx0Y9+lMd3G/nLv/xLPP744xBC4P/7//4/7Nq1i8d4m0gkErjtttswOTmJbDaLt771rdi3bx+P7zZw8uRJfOADH8DXvvY1jI6Oln1MvV67HhggExERERHZMMWCiIiIiMiGATIRERERkQ0DZCIiIiIiGwbIREREREQ2DJCJiIiIiGwYIBMRbRL9/f0AgHg8jne/+92rttxbbrkl/9+vetWrVm25RETbFQNkIqJNZm5uDkeOHFm15f3iF7/I//c3v/nNVVsuEdF2xX7JRESbzF133YWzZ8/iPe95D/76r/8a//Zv/4b77rsPpmni4osvxh133IFAIIBrrrkGF198Mc6dO4dvfOMb+NjHPoahoSGcO3cOnZ2d+NznPodPfepTAIA3vOEN+PrXv47+/n4MDAwglUrh9ttvx8DAACRJwu/93u/h1a9+NR544AH87Gc/w9zcHE6cOIFrr70Wd95558buECKidcYRZCKiTeb2229HU1MT/vqv/xpDQ0P42te+hn/5l3/BN7/5TdTX1+Mf/uEfAAAzMzN45zvfiW9+85t46qmn4PP58NWvfhU/+MEPkMlk8NOf/hS33347AODrX/96wXvce++9qK2txbe//W3cd999uPfee/Oj1k8++SQ++9nP4lvf+hZ+/OMfY2BgYH13ABHRBuMIMhHRJvb4449jbGwMb3zjGwEA2WwWe/fuzf/+0ksvBQBceeWVqKmpwVe+8hUcPXoUx44dQzKZ9FzuY489ho9//OMAgLq6Orz4xS/GL37xC0SjURw8eBDRaBQA0NbWhrm5ubXaPCKiTYkBMhHRJmYYBm6++eb8SHAikYBhGPnfB4NBAMAPf/hDfPazn8Vb3/pWvPa1r8XMzAyEEJ7Ldf5OCJFfbiAQyP9ckqSiyyEi2o6YYkFEtMmoqgpd1wEAV199NX7wgx9gamoKQgjceeeduO+++5b8zaOPPoqbb74Zr3vd69DQ0IBf/vKX+YBXUZT88izXXHMNvvGNbwAApqen8cMf/hBXXXXVGm8ZEdHWwACZiGiTqa+vR2trK2655Rbs2bMH733ve/G2t70NL3/5y2GaJt75zncu+Zs3vOEN+M53voNXv/rV+MM//EMcOHAAJ0+eBAC8+MUvxqte9SpkMpn869/znvdgdnYWr3zlK/Ff/+t/xbve9S5cfPHF67aNRESbmST47IyIiIiIKI8jyERERERENgyQiYiIiIhsGCATEREREdkwQCYiIiIismGATERERERkwwCZiIiIiMiGATIRERERkc3/D9NzgTcoGdl+AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"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",
"\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 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 MAF parameters \"\"\"\n",
"\n",
" batch_size = 32\n",
" dtype = np.float32\n",
" tf_version = tf.__version__\n",
" params = 2\n",
" hidden_units = [512,512]\n",
" base_dist = tfp.distributions.Normal(loc=0., scale=1.)\n",
" dims = data.shape[1]\n",
" learning_rate = 1e-4\n",
" \n",
" \"\"\" initialize samples \"\"\"\n",
"\n",
" maf = MAF(dtype, tf_version, batch_size, params, hidden_units, base_dist, dims)\n",
"\n",
" dims = maf.get_dims(data)\n",
" samples = maf.create_tensor(data)\n",
" print(f'TensorFlow version: {maf.tf_version}')\n",
" print(f'Number of dimensions: {maf.dims}')\n",
" print(f'Learning rate: {learning_rate}\\n')\n",
" \n",
" \"\"\" initialize MAF \"\"\"\n",
"\n",
" maf = maf.make_maf(data)\n",
" print('Successfully created model...\\n')\n",
" \n",
" \"\"\" initialize loss and optimizer \"\"\"\n",
"\n",
" loss = -tf.reduce_mean(maf.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": 4
}
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