Unverified Commit 0da97b56 authored by kaanguney's avatar kaanguney Committed by GitHub

Delete notebooks directory

parent 059106cb
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"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",
"import tensorflow.python.util.deprecation as deprecation\n",
"deprecation._PRINT_DEPRECATION_WARNINGS = False\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 realnvp import RealNVP \n",
"from experiment import Experiment"
]
},
{
"cell_type": "code",
"execution_count": null,
"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",
"Number of masked dimensions: 36\n",
"\n",
"Successfully created model...\n",
"\n",
"Optimizer and loss successfully defined...\n",
"\n",
"Iteration 0: 60.184722900390625\n",
"Iteration 10000: 50.05358123779297\n",
"Iteration 20000: 49.8468017578125\n",
"Iteration 30000: 49.18869400024414\n",
"Iteration 40000: 50.25196838378906\n",
"Iteration 50000: 52.78778839111328\n",
"Iteration 60000: 58.92238998413086\n",
"Iteration 70000: 51.21335983276367\n",
"Iteration 80000: 55.31623458862305\n",
"Iteration 90000: 57.86042785644531\n",
"Training finished...\n",
"\n",
"Displaying results...\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAB11UlEQVR4nO2deZhcZZ3vv+fUXtXV3eklISELnRCWgKCCiEMEN0YZ4GFXkYmOOCIColcdRQYEHhbFUedRnFG8M97LRUdlgFGvy/UqDiMoIHJBjEBYzEJIOul0d7prX84594/KqZw+ffY6p+pU1ffzD6Sq65x3f3/vb3sFRVEUEEIIIYQQQgAAYqcLQAghhBBCSJiggEwIIYQQQogGCsiEEEIIIYRooIBMCCGEEEKIBgrIhBBCCCGEaKCATAghhBBCiAYKyISQvmDnzp14zWte0+li+MbDDz+Mc845Z8FnDz74IM4++2y8/e1vx9VXX418Pg8AkCQJt9xyC97xjnfg9NNPx3e/+13DZ37lK1/BD37wAwDA1772Nfzyl7/0tcyXXnopZmZmAAAf/OAH8eKLL/r6fEII8QsKyIQQ0kWUy2X84z/+Iz72sY9BkqTm5zMzM/jMZz6DO+64Az//+c+xatUqfPGLXwQAfO9738P27dvx4x//GPfeey/uuusuPP3004ue/dGPfhTnnnsuAOCxxx5DvV73tey/+c1vmv//3//7f8fhhx/u6/MJIcQvop0uACGEdJpcLoebbroJzz33HARBwBvf+EZ8/OMfRzQaxVe/+lX84he/QCwWw5IlS/C5z30OS5cuNf1cyzXXXANBEPDSSy9hZmYGp5xyCq677jrEYjG89NJLuPXWW7F//35IkoRNmzbhwgsvxGOPPYZbb70V6XQaxWIR9957L+LxePOZDz/8MEqlEm677TZ89atfXfD5q171Khx22GEAgIsvvhjnnHMObrjhBvzyl7/EO9/5TkSjUQwNDeHMM8/Ej370Ixx33HGLyrt+/Xokk0ls3rwZX/jCFxCJRHDaaafhi1/8Ih5//HFIkoQNGzbguuuuw8DAAN7ylrfguOOOw5YtW5ptduedd6JarWJmZgbnnnsuPvaxj+Ezn/kMAOB973sfvvnNb+KSSy7BV77yFbzqVa/C97//fdx9990QRRFjY2O4/vrrMTExgWuuuQYDAwPYsmULJicnsXbtWnz5y19GJpMJaCQQQkgDapAJIX3PLbfcguHhYfzv//2/cd9992HLli341re+hd27d+Ouu+7Cfffdh/vvvx+nnHIKnn76adPPjXjuuefwP/7H/8BPf/pTvPTSS/j+97+Per2Oq6++Gp/4xCdw//3349vf/ja+9a1v4amnngIAvPDCC/jSl76EH/3oRwuEYwB429vehmuvvRZDQ0MLPp+cnMQhhxzS/PchhxyCfD6PQqGA3bt3Y/ny5Qu+m5ycNG2PSy65BMceeyw+9alP4fTTT8c3v/lNRCIR3H///fjRj36EpUuXNrXTALB+/Xr87Gc/w9ve9jZ861vfwuc//3ncf//9+P73v49vfvObmJmZwec+9zkAwF133bWgLI888gj+5V/+Bf/rf/0v/OhHP8JZZ52FK6+8Euolr5s3b8a//uu/4qc//Sn27t2L//N//o9VVxJCiC9Qg0wI6Xt+/etf47vf/S4EQUA8Hse73/1u3HXXXfjbv/1bHHXUUTjvvPNw6qmn4tRTT8Ub3vAGyLJs+LkR5513XlPjec455+CBBx7AySefjB07duDaa69t/l25XMYzzzyDdevWYfny5Tj00ENd1UGWZcPPRVFsCpv6z53y4IMPIpfL4be//S0AoFarYXR0tPn9iSeeCAAQBAHf+MY38OCDD+LHP/4xXnrpJSiKglKpZPrshx56CH/1V3+FkZERAMD555+PW2+9FTt37gQAvPGNb2weEo444gjMzc05LjchhHiFAjIhpO/RC5eyLKNer0MURXz729/GH//4RzzyyCO47bbb8PrXvx7XXXed6ed6IpFI8/8VRYEoipAkCYODg/jhD3/Y/G7fvn3IZrN46qmnkE6nXddh+fLl+MMf/tD89549ezA0NIR0Oo3ly5djampqwXdabbMdsizj2muvxWmnnQYAKBQKqFQqze/V8haLRZx33nl429vehhNPPBEXXHABfvnLXxoK6CpG3ymK0vR/TiaTzc8FQbB8FiGE+AVdLAghfc/GjRvxne98B4qioFqt4p577sFf/MVf4LnnnsNZZ52FdevW4UMf+hD+5m/+Blu2bDH93Iif/exnqFarqFQq+I//+A+8+c1vxsTEBBKJRFNA3r17N8466yxs3ry5pTr84Q9/wLZt2wA0AvPe+ta3AgDe+ta34r777kO9Xsf8/Dx+8pOf4G1ve5vl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oigQBKH5fS6XW9Tv6uck/Nx///0YGRlpHmwBsI97jNnZWWzevBlf+cpXcNNNN+GTn/wk+7gHSafTeOWVV3DGGWfg+uuvx6ZNm9jPPcLb3/52RKMHPXrd9KvR37YL+iBrGBgYQKFQaP5bluUFnUq6j927d+PKK6/Ee97zHpx99tn4h3/4h+Z3hUIBg4ODi/q9UCggm812orjEJffddx8EQcAjjzyCZ599Fp/+9KcXaJPYx93P8PAw1q5di3g8jrVr1yKRSGBycrL5Pfu4N/if//N/YuPGjfjEJz6B3bt3433vex9qtVrze/Zz76D1IbbrV6O/bVs52/amLuC1r30tfv3rXwMAnnrqKRxxxBEdLhFphX379uHSSy/F3/3d3+HCCy8EAGzYsAGPPfYYAODXv/41TjzxRLz2ta/Fww8/DFmWsWvXLsiyjJGRkU4WnTjkO9/5Dr797W/j7rvvxtFHH43bb78dp556Kvu4hzjhhBPw0EMPQVEU7NmzB6VSCW94wxvYxz3G4OBgU9AdGhpCvV7net2juOlXo79tF4KiKErb3hZy1CwWzz//PBRFwW233YZ169Z1uljEI7fccgt+9rOfYe3atc3P/v7v/x633HILarUa1q5di1tuuQWRSAR33HEHfv3rX0OWZXzmM59p6yQk/rBp0ybceOONEEUR119/Pfu4h/jCF76Axx57DIqi4L/9t/+GlStXso97jEKhgGuvvRZTU1Oo1Wp473vfi2OPPZb93CPs3LkTH//4x3HPPfdg69atjvvV7G/bAQVkQgghhBBCNNDFghBCCCGEEA0UkAkhhBBCCNFAAZkQQgghhBANFJAJIYQQQgjRQAGZEEIIIYQQDRSQCSGkgxx55JEAgFwuhyuuuMK3527atKn5/+ecc45vzyWEkH6AAjIhhISAubk5PPfcc74973e/+13z/3/4wx/69lxCCOkHeI8yIYSEgFtuuQV79+7FlVdeiX/6p3/CD37wA9x1112QZRnHHHMMbrjhBiQSCZx88sk45phjsG/fPtx777246aab8MILL2Dfvn2YmJjA1772NXzxi18EAFx00UX493//dxx55JHYsmULSqUSrrvuOmzZsgWCIOADH/gAzj33XNx///146KGHMDc3h5dffhmnnHIKbrzxxs42CCGEdBBqkAkhJARcd911WLp0Kf7pn/4JL7zwAu655x5873vfww9/+EOMjo7iX//1XwEAs7OzuOyyy/DDH/4QTz31FGKxGL7//e/jF7/4BSqVCv7rv/4L1113HQDg3//93xe844477sCSJUvw4x//GHfddRfuuOOOptb6ySefxFe/+lX86Ec/wn/+539iy5Yt7W0AQggJEdQgE0JIyHjsscewfft2vPOd7wQA1Go1bNiwofn98ccfDwB43eteh+HhYXznO9/Bn//8Z2zbtg3FYtH0uY8++ihuu+02AMDIyAje+ta34ne/+x0GBgbwmte8BgMDAwCAVatWYW5uLqjqEUJI6KGATAghIUOSJJxxxhlNTXChUIAkSc3vk8kkAOCBBx7AV7/6Vbz3ve/F+eefj9nZWSiKYvpc/XeKojSfm0gkmp8LgmD5HEII6XXoYkEIISEgGo2iXq8DAF7/+tfjF7/4Baanp6EoCm688Ubcddddi37zyCOP4IwzzsAFF1yAsbExPP74402BNxKJNJ+ncvLJJ+Pee+8FAMzMzOCBBx7ASSedFHDNCCGk+6CATAghIWB0dBQrVqzApk2bcNRRR+Gqq67C+973Ppx55pmQZRmXXXbZot9cdNFF+MlPfoJzzz0XH/nIR/DqV78aO3fuBAC89a1vxTnnnINKpdL8+yuvvBL79+/H2Wefjb/+67/G5ZdfjmOOOaZtdSSEkG5BUGhHI4QQQgghpAk1yIQQQgghhGiggEwIIYQQQogGCsiEEEIIIYRooIBMCCGEEEKIBgrIhBBCCCGEaKCATAghhBBCiAYKyIQQQgghhGj4/+dgmFtpv2bIAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimizer and loss successfully defined...\n",
"\n",
"Iteration 0: 60.184722900390625\n",
"Iteration 10000: 50.05423355102539\n",
"Iteration 20000: 49.84687042236328\n",
"Iteration 30000: 49.18657684326172\n",
"Iteration 40000: 50.251670837402344\n",
"Iteration 50000: 52.787811279296875\n",
"Iteration 60000: 58.922340393066406\n",
"Iteration 70000: 51.213382720947266\n",
"Iteration 80000: 55.316341400146484\n"
]
}
],
"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 = [512,512]\n",
" base_dist = tfp.distributions.Normal(loc=0., scale=1.)\n",
" dims = data.shape[1]\n",
" learning_rate = 1e-4\n",
" steps = 1e4\n",
" \n",
" \"\"\" initialize samples \"\"\"\n",
"\n",
" realnvp = RealNVP(dtype, tf_version, batch_size, params, hidden_units, \n",
" base_dist, dims, shift_only=True, \n",
" is_constant_jacobian=True, masked_dimension_count=dims-1)\n",
"\n",
" dims = realnvp.get_dims(data)\n",
" samples = realnvp.create_tensor(data)\n",
" print(f'TensorFlow version: {realnvp.tf_version}')\n",
" print(f'Number of dimensions: {realnvp.dims}')\n",
" print(f'Learning rate: {learning_rate}')\n",
" print(f'Number of masked dimensions: {realnvp.masked_dimension_count}\\n')\n",
" \n",
" \"\"\" initialize RealNVP \"\"\"\n",
"\n",
" realnvp = realnvp.make_realnvp(data)\n",
" print('Successfully created model...\\n')\n",
" \n",
" \"\"\" initialize loss and optimizer \"\"\"\n",
"\n",
" loss = -tf.reduce_mean(realnvp.log_prob(samples))\n",
" optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate).minimize(loss)\n",
" \n",
" experiment = Experiment(optimizer, learning_rate, loss, steps)\n",
" \n",
" keywords = ['adam', 'rmsprop', 'sgd']\n",
" \n",
" for keyword in keywords:\n",
"\n",
" session = tf.compat.v1.Session()\n",
" tf.compat.v1.set_random_seed(42)\n",
" experiment.change_optimizer(learning_rate, loss, keyword=keyword)\n",
" optimizer = experiment.get_optimizer()\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()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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
}
{
"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": [
"<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",
"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
}
{
"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 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: 51.908042907714844\n",
"Iteration 10000: -66.41500091552734\n",
"Iteration 20000: -85.92218017578125\n",
"Iteration 30000: -86.00814819335938\n",
"Iteration 40000: -95.52314758300781\n",
"Iteration 50000: -100.09404754638672\n",
"Iteration 60000: -101.45828247070312\n",
"Iteration 70000: -109.66394805908203\n",
"Iteration 80000: -117.25852966308594\n",
"Iteration 90000: -108.93268585205078\n",
"Training finished...\n",
"\n",
"Displaying results...\n"
]
},
{
"data": {
"image/png": "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\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",
"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",
" 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",
" maf = MAF(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 = 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, 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()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "94169c2a",
"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": 2,
"id": "087e74b6",
"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": null,
"id": "23f55548",
"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: 95.97050476074219\n",
"Iteration 10000: 57.572265625\n",
"Iteration 20000: 49.272705078125\n",
"Iteration 30000: 46.765769958496094\n",
"Iteration 40000: 46.634979248046875\n",
"Iteration 50000: 44.979713439941406\n"
]
}
],
"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 = 8\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(Planar(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()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0d33af87",
"metadata": {},
"outputs": [],
"source": []
}
],
"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
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"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 realnvp import RealNVP "
]
},
{
"cell_type": "code",
"execution_count": 8,
"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",
"Number of masked dimensions: 36\n",
"\n",
"Successfully created model...\n",
"\n",
"Optimizer and loss successfully defined...\n",
"\n",
"Iteration 0: 60.43388366699219\n",
"Iteration 10000: 62.8946533203125\n",
"Iteration 20000: 51.936767578125\n",
"Iteration 30000: 48.95115280151367\n",
"Iteration 40000: 48.97389221191406\n",
"Iteration 50000: 48.37859344482422\n",
"Iteration 60000: 48.292030334472656\n",
"Iteration 70000: 59.42523956298828\n",
"Iteration 80000: 51.48047637939453\n",
"Iteration 90000: 51.44146728515625\n",
"Training finished...\n",
"\n",
"Displaying results...\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAB19UlEQVR4nO2deZxkVZXnf+/Fmhm5VWZlbVSRZJVAUdAogohj4YaO0sKwq9iNdmuLKLiM2oo0NPARpHFAP4rdLU43MwzaKg20Mi7jiLaDKCDNB0VEisWioKgtqyorKzL2eO/OH5Ev6sWLty8RLyJ+38/Hj1RGxH333eXcc84991xJCCFACCGEEEIIAQDI3a4AIYQQQgghcYIKMiGEEEIIITqoIBNCCCGEEKKDCjIhhBBCCCE6qCATQgghhBCigwoyIYQQQgghOqggE0IGgu3bt+OEE07odjVC44EHHsBZZ53V8ref//znOPPMM/HWt74VH/3oR7G4uAgAUBQF1113Hd72trfhLW95C771rW+ZlvnlL38Z3/3udwEAX/3qV3HfffeFWuf3ve992L9/PwDgAx/4AJ599tlQyyeEkLCggkwIIT1EuVzGl770JXz84x+HoijNv+/fvx+f/exnccstt+DHP/4x1q1bh5tuugkA8O1vfxvbtm3D97//fdx11124/fbb8fjjj7eV/bGPfQxnn302AODhhx9GvV4Pte6//OUvm//93//7f8fLXvayUMsnhJCwSHa7AoQQ0m3y+TyuvfZaPPXUU5AkCaeeeio+8YlPIJlM4itf+Qp+8pOfIJVKYdmyZbjhhhuwYsUKy7/rufzyyyFJEp577jns378fr33ta3HllVcilUrhueeew/XXX48DBw5AURRcdNFFOP/88/Hwww/j+uuvx/DwMIrFIu666y6k0+lmmQ888ABKpRI+//nP4ytf+UrL3//kT/4ERxxxBADgwgsvxFlnnYWrr74a9913H97xjncgmUxifHwcb3/723Hvvffi+OOPb6vvkUceiWw2iyeeeAJf+MIXkEgk8PrXvx433XQTHnnkESiKgk2bNuHKK6/EyMgI3vSmN+H444/Hli1bmm126623olqtYv/+/Tj77LPx8Y9/HJ/97GcBAO9973vx9a9/HX/2Z3+GL3/5y/iTP/kTfOc738Edd9wBWZaxfPlyXHXVVZidncXll1+OkZERbNmyBbt27cL69evxxS9+EblcLqKRQAghDehBJoQMPNdddx0mJibwv//3/8bdd9+NLVu24LbbbsPOnTtx++234+6778Y999yD1772tXj88cct/27GU089hf/xP/4HfvjDH+K5557Dd77zHdTrdXz0ox/FJz/5Sdxzzz34xje+gdtuuw2/+c1vAADPPPMMbr75Ztx7770tyjEAvPnNb8YVV1yB8fHxlr/v2rULq1atav571apVWFxcRKFQwM6dO7F69eqWz3bt2mXZHn/2Z3+G4447Dp/+9Kfxlre8BV//+teRSCRwzz334N5778WKFSua3mkAOPLII/GjH/0Ib37zm3Hbbbfh7/7u73DPPffgO9/5Dr7+9a9j//79uOGGGwAAt99+e0tdHnzwQfzTP/0T/tf/+l+49957ccYZZ+DSSy+FdsnrE088gX/+53/GD3/4Q+zZswf/5//8H7uuJISQUKAHmRAy8Nx///341re+BUmSkE6n8a53vQu33347/uqv/gobN27EOeecg9e97nV43eteh9e85jVQVdX072acc845TY/nWWedhZ/+9Kc45ZRT8MILL+CKK65ofq9cLuPJJ5/Ehg0bsHr1ahx22GGe3kFVVdO/y7LcVDaNf3fLz3/+c+TzefzqV78CANRqNUxNTTU/P+mkkwAAkiTha1/7Gn7+85/j+9//Pp577jkIIVAqlSzL/sUvfoE//dM/xeTkJADg3HPPxfXXX4/t27cDAE499dSmkXDUUUdhYWHBdb0JIcQvVJAJIQOPUblUVRX1eh2yLOMb3/gGfve73+HBBx/E5z//ebz61a/GlVdeafl3I4lEovnfQgjIsgxFUTA2Nobvfe97zc/27t2L0dFR/OY3v8Hw8LDnd1i9ejV++9vfNv+9e/dujI+PY3h4GKtXr8bc3FzLZ3pvsxOqquKKK67A61//egBAoVBApVJpfq7Vt1gs4pxzzsGb3/xmnHTSSTjvvPNw3333mSroGmafCSGa8c/ZbLb5d0mSbMsihJCwYIgFIWTg2bx5M775zW9CCIFqtYo777wT/+k//Sc89dRTOOOMM7BhwwZ88IMfxF/8xV9gy5Ytln8340c/+hGq1SoqlQr+7d/+DW984xsxOzuLTCbTVJB37tyJM844A0888USgd/jtb3+L559/HkDjYN5pp50GADjttNNw9913o16v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iUQC9Xq9izUiQcjlchgZGcHi4iI++tGP4uMf/ziEEJAkqfl5Pp9v63ft7yT+3HPPPZicnGwatgDYx33G/Pw8nnjiCXz5y1/Gtddei0996lPs4z5keHgYL730Ek4//XRcddVVuOiii9jPfcJb3/pWJJOHInq99KvZdzsFY5B1jIyMoFAoNP+tqmpLp5LeY+fOnbj00kvx7ne/G2eeeSb+23/7b83PCoUCxsbG2vq9UChgdHS0G9UlHrn77rshSRIefPBB/OEPf8BnPvOZFm8S+7j3mZiYwPr165FOp7F+/XpkMhns2rWr+Tn7uD/4n//zf2Lz5s345Cc/iZ07d+K9730varVa83P2c/+gjyF26lez73asnh17Ug/wyle+Evfffz8A4De/+Q2OOuqoLteIBGHv3r143/veh7/+67/G+eefDwDYtGkTHn74YQDA/fffj5NOOgmvfOUr8cADD0BVVezYsQOqqmJycrKbVScu+eY3v4lvfOMbuOOOO3DMMcfgxhtvxOte9zr2cR9x4okn4he/+AWEENi9ezdKpRJe85rXsI/7jLGxsaaiOz4+jnq9Tnndp3jpV7PvdgpJCCE69rSYo2WxePrppyGEwOc//3ls2LCh29UiPrnuuuvwox/9COvXr2/+7W/+5m9w3XXXoVarYf369bjuuuuQSCRwyy234P7774eqqvjsZz/b0UlIwuGiiy7CNddcA1mWcdVVV7GP+4gvfOELePjhhyGEwH/9r/8Va9euZR/3GYVCAVdccQXm5uZQq9Xwnve8B8cddxz7uU/Yvn07PvGJT+DOO+/E1q1bXfer1Xc7ARVkQgghhBBCdDDEghBCCCGEEB1UkAkhhBBCCNFBBZkQQgghhBAdVJAJIYQQQgjRQQWZEEIIIYQQHVSQCSGkixx99NEAgHw+jw9/+MOhlXvRRRc1//uss84KrVxCCBkEqCATQkgMWFhYwFNPPRVaeb/+9a+b//29730vtHIJIWQQ4D3KhBASA6677jrs2bMHl156Kf7+7/8e3/3ud3H77bdDVVUce+yxuPrqq5HJZHDKKafg2GOPxd69e3HXXXfh2muvxTPPPIO9e/didnYWX/3qV3HTTTcBAC644AL867/+K44++mhs2bIFpVIJV155JbZs2QJJkvD+978fZ599Nu655x784he/wMLCAl588UW89rWvxTXXXNPdBiGEkC5CDzIhhMSAK6+8EitWrMDf//3f45lnnsGdd96Jb3/72/je976Hqakp/PM//zMAYH5+HhdffDG+973v4Te/+Q1SqRS+853v4Cc/+QkqlQr+3//7f7jyyisBAP/6r//a8oxbbrkFy5Ytw/e//33cfvvtuOWWW5pe68ceewxf+cpXcO+99+Lf//3fsWXLls42ACGExAh6kAkhJGY8/PDD2LZtG97xjncAAGq1GjZt2tT8/OUvfzkA4FWvehUmJibwzW9+E3/84x/x/PPPo1gsWpb70EMP4fOf/zwAYHJyEqeddhp+/etfY2RkBCeccAJGRkYAAOvWrcPCwkJUr0cIIbGHCjIhhMQMRVFw+umnNz3BhUIBiqI0P89mswCAn/70p/jKV76C97znPTj33HMxPz8PIYRlucbPhBDNcjOZTPPvkiTZlkMIIf0OQywIISQGJJNJ1Ot1AMCrX/1q/OQnP8G+ffsghMA111yD22+/ve03Dz74IE4//XScd955WL58OR555JGmwptIJJrlaZxyyim46667AAD79+/HT3/6U5x88skRvxkhhPQeVJAJISQGTE1NYc2aNbjooouwceNGXHbZZXjve9+Lt7/97VBVFRdffHHbby644AL84Ac/wNlnn42PfOQjeMUrXoHt27cDAE477TScddZZqFQqze9feumlOHDgAM4880z8+Z//OS655BIce+yxHXtHQgjpFSTBfTRCCCGEEEKa0INMCCGEEEKIDirIhBBCCCGE6KCCTAghhBBCiA4qyIQQQgghhOiggkwIIYQQQogOKsiEEEIIIYTooIJMCCGEEEKIjv8PSqoj+ud2t+gAAAAASUVORK5CYII=\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",
"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",
" realnvp = RealNVP(dtype, tf_version, batch_size, params, hidden_units, \n",
" base_dist, dims, shift_only=True, \n",
" is_constant_jacobian=True, masked_dimension_count=dims-1)\n",
"\n",
" dims = realnvp.get_dims(data)\n",
" samples = realnvp.create_tensor(data)\n",
" print(f'TensorFlow version: {realnvp.tf_version}')\n",
" print(f'Number of dimensions: {realnvp.dims}')\n",
" print(f'Learning rate: {learning_rate}')\n",
" print(f'Number of masked dimensions: {realnvp.masked_dimension_count}\\n')\n",
" \n",
" \"\"\" initialize RealNVP \"\"\"\n",
"\n",
" realnvp = realnvp.make_realnvp(data)\n",
" print('Successfully created model...\\n')\n",
" \n",
" \"\"\" initialize loss and optimizer \"\"\"\n",
"\n",
" loss = -tf.reduce_mean(realnvp.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
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment