{ "cells": [ { "cell_type": "code", "execution_count": 1, "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", "plt.style.use('seaborn')\n", "\n", "from data_loader import load_data\n", "from data_preprocesser import preprocess_data\n", "from maf import IAF" ] }, { "cell_type": "code", "execution_count": 6, "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: 60.449180603027344\n", "Iteration 10000: 32.882728576660156\n", "Iteration 20000: 26.221080780029297\n", "Iteration 30000: 23.287174224853516\n", "Iteration 40000: 22.44567108154297\n", "Iteration 50000: 17.521474838256836\n", "Iteration 60000: 22.41493797302246\n", "Iteration 70000: 24.137344360351562\n", "Iteration 80000: 14.954710006713867\n", "Iteration 90000: 21.243478775024414\n", "Training finished...\n", "\n", "Displaying results...\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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", "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 = [5,5]\n", " base_dist = tfp.distributions.Normal(loc=0., scale=1.)\n", " dims = data.shape[1]\n", " learning_rate = 1e-4\n", " activation = 'relu'\n", " hidden_degrees = 'random'\n", " conditional=True\n", " conditional_event_shape = (dims,)\n", " event_shape = conditional_event_shape\n", " conditional_input_layers = 'first_layer'\n", " \n", " \"\"\" initialize samples \"\"\"\n", "\n", " iaf = IAF(dtype, tf_version, batch_size, \n", " params, hidden_units, base_dist, dims,\n", " activation,\n", " conditional, hidden_degrees, \n", " conditional_event_shape,\n", " conditional_input_layers,\n", " event_shape\n", " )\n", "\n", " dims = iaf.get_dims(data)\n", " samples = iaf.create_tensor(data)\n", " print(f'TensorFlow version: {iaf.tf_version}')\n", " print(f'Number of dimensions: {iaf.dims}')\n", " print(f'Learning rate: {learning_rate}\\n')\n", " \n", " \"\"\" initialize iaf \"\"\"\n", "\n", " iaf = iaf.make_maf(data)\n", " print('Successfully created model...\\n')\n", " \n", " \"\"\" initialize loss and optimizer \"\"\"\n", "\n", " loss = -tf.reduce_mean(iaf.log_prob(samples, bijector_kwargs={'conditional_input': 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 }