diff --git a/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end.ipynb b/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0697a6e86392d5f4076fefd3fbcac14aa7824b23 --- /dev/null +++ b/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end.ipynb @@ -0,0 +1,1461 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pathlib\n", + "import os\n", + "\n", + "from skluc.main.utils import logger\n", + "\n", + "matplotlib.rcParams.update({'font.size': 14})\n", + "pd.set_option('display.expand_frame_repr', False)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def build_df():\n", + " filepath = os.path.join(DIRNAME_BIG, FILENAME_BIG)\n", + " df = pd.read_csv(filepath)\n", + " df = df.apply(pd.to_numeric, errors=\"ignore\")\n", + " df = df.drop_duplicates()\n", + " col_to_delete = ['--batch-size', '--chi-square-PD-kernel', '--chi-square-kernel',\n", + " '--cifar10', '--cifar100', '--exp-chi-square-kernel',\n", + " '--intercept-constant', '--laplacian-kernel', '--linear-kernel',\n", + " '--mnist', '--quiet', '--rbf-kernel',\n", + " '--sigmoid-kernel', '--stacked-kernel', '--sumed-kernel', '--svhn',\n", + " '--tensorboard', '--validation-size',\n", + " 'deepfriedconvnet', 'deepstrom','dense', \"--gamma\", \"--nb-stack\", \n", + " \"--non-linear\", \"--non-linearity\", \"--num-epoch\", \"--seed\",\n", + " \"--train-size\", \"--second-layer-size\", \"activation_function\",\n", + " \"deepstrom_activation\", \"--real-fastfood\", \"--real-nystrom\"\n", + " ]\n", + " for c in col_to_delete:\n", + " df = df.drop([c], axis=1)\n", + "\n", + " return df\n", + "\n", + "DIRNAME_BIG = \"/home/luc/Resultats/Deepstrom/october_2018/classif_end_to_end\"\n", + "FILENAME_BIG = \"gathered_results.csv\"\n", + "df = build_df()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def get_sorted_acc_for_dataset(df_, dataset):\n", + " df_dataset = df_[df_.dataset == dataset]\n", + " df_dataset = df_dataset.sort_values(by=\"test_acc\", ascending=False)\n", + " return df_dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>--nys-size</th>\n", + " <th>--out-dim</th>\n", + " <th>dataset</th>\n", + " <th>kernel</th>\n", + " <th>network</th>\n", + " <th>test_acc</th>\n", + " <th>test_eval_time</th>\n", + " <th>training_time</th>\n", + " <th>val_acc</th>\n", + " <th>val_eval_time</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>53</th>\n", + " <td>None</td>\n", + " <td>1024</td>\n", + " <td>mnist</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.9908</td>\n", + " <td>0.046835</td>\n", + " <td>692.606522</td>\n", + " <td>0.9908</td>\n", + " <td>0.093102</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>None</td>\n", + " <td>128</td>\n", + " <td>mnist</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.9879</td>\n", + " <td>0.059532</td>\n", + " <td>647.076592</td>\n", + " <td>0.9888</td>\n", + " <td>0.070084</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>None</td>\n", + " <td>64</td>\n", + " <td>mnist</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.9874</td>\n", + " <td>0.058991</td>\n", + " <td>643.130677</td>\n", + " <td>0.9887</td>\n", + " <td>0.068697</td>\n", + " </tr>\n", + " <tr>\n", + " <th>68</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9852</td>\n", + " <td>0.052776</td>\n", + " <td>1258.943433</td>\n", + " <td>0.9846</td>\n", + " <td>0.103054</td>\n", + " </tr>\n", + " <tr>\n", + " <th>18</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9845</td>\n", + " <td>0.064160</td>\n", + " <td>1008.505888</td>\n", + " <td>0.9848</td>\n", + " <td>0.079071</td>\n", + " </tr>\n", + " <tr>\n", + " <th>59</th>\n", + " <td>None</td>\n", + " <td>16</td>\n", + " <td>mnist</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.9838</td>\n", + " <td>0.063164</td>\n", + " <td>637.988250</td>\n", + " <td>0.9849</td>\n", + " <td>0.078794</td>\n", + " </tr>\n", + " <tr>\n", + " <th>41</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9816</td>\n", + " <td>0.044161</td>\n", + " <td>864.483099</td>\n", + " <td>0.9813</td>\n", + " <td>0.093081</td>\n", + " </tr>\n", + " <tr>\n", + " <th>63</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9813</td>\n", + " <td>0.064762</td>\n", + " <td>1815.580290</td>\n", + " <td>0.9813</td>\n", + " <td>0.115415</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9813</td>\n", + " <td>0.043917</td>\n", + " <td>773.847790</td>\n", + " <td>0.9783</td>\n", + " <td>0.092328</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9813</td>\n", + " <td>0.186224</td>\n", + " <td>1401.125618</td>\n", + " <td>0.9782</td>\n", + " <td>0.202431</td>\n", + " </tr>\n", + " <tr>\n", + " <th>24</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9795</td>\n", + " <td>0.121712</td>\n", + " <td>1100.418470</td>\n", + " <td>0.9778</td>\n", + " <td>0.136375</td>\n", + " </tr>\n", + " <tr>\n", + " <th>39</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9792</td>\n", + " <td>0.300938</td>\n", + " <td>1987.493944</td>\n", + " <td>0.9801</td>\n", + " <td>0.326709</td>\n", + " </tr>\n", + " <tr>\n", + " <th>26</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9789</td>\n", + " <td>0.058784</td>\n", + " <td>871.508166</td>\n", + " <td>0.9780</td>\n", + " <td>0.109170</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9758</td>\n", + " <td>0.564625</td>\n", + " <td>3119.552520</td>\n", + " <td>0.9751</td>\n", + " <td>0.616923</td>\n", + " </tr>\n", + " <tr>\n", + " <th>35</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9729</td>\n", + " <td>0.059439</td>\n", + " <td>727.739111</td>\n", + " <td>0.9707</td>\n", + " <td>0.070918</td>\n", + " </tr>\n", + " <tr>\n", + " <th>37</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9718</td>\n", + " <td>0.066200</td>\n", + " <td>804.819344</td>\n", + " <td>0.9663</td>\n", + " <td>0.079810</td>\n", + " </tr>\n", + " <tr>\n", + " <th>58</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9498</td>\n", + " <td>0.059206</td>\n", + " <td>728.185049</td>\n", + " <td>0.9453</td>\n", + " <td>0.072418</td>\n", + " </tr>\n", + " <tr>\n", + " <th>70</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>mnist</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.9456</td>\n", + " <td>0.047744</td>\n", + " <td>750.139674</td>\n", + " <td>0.9452</td>\n", + " <td>0.091661</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", + "53 None 1024 mnist None dense 0.9908 0.046835 692.606522 0.9908 0.093102\n", + "25 None 128 mnist None dense 0.9879 0.059532 647.076592 0.9888 0.070084\n", + "45 None 64 mnist None dense 0.9874 0.058991 643.130677 0.9887 0.068697\n", + "68 256 None mnist linear deepstrom 0.9852 0.052776 1258.943433 0.9846 0.103054\n", + "18 128 None mnist linear deepstrom 0.9845 0.064160 1008.505888 0.9848 0.079071\n", + "59 None 16 mnist None dense 0.9838 0.063164 637.988250 0.9849 0.078794\n", + "41 64 None mnist linear deepstrom 0.9816 0.044161 864.483099 0.9813 0.093081\n", + "63 512 None mnist linear deepstrom 0.9813 0.064762 1815.580290 0.9813 0.115415\n", + "13 16 None mnist linear deepstrom 0.9813 0.043917 773.847790 0.9783 0.092328\n", + "0 128 None mnist chi2_cpd deepstrom 0.9813 0.186224 1401.125618 0.9782 0.202431\n", + "24 64 None mnist chi2_cpd deepstrom 0.9795 0.121712 1100.418470 0.9778 0.136375\n", + "39 256 None mnist chi2_cpd deepstrom 0.9792 0.300938 1987.493944 0.9801 0.326709\n", + "26 16 None mnist chi2_cpd deepstrom 0.9789 0.058784 871.508166 0.9780 0.109170\n", + "14 512 None mnist chi2_cpd deepstrom 0.9758 0.564625 3119.552520 0.9751 0.616923\n", + "35 8 None mnist linear deepstrom 0.9729 0.059439 727.739111 0.9707 0.070918\n", + "37 8 None mnist chi2_cpd deepstrom 0.9718 0.066200 804.819344 0.9663 0.079810\n", + "58 4 None mnist linear deepstrom 0.9498 0.059206 728.185049 0.9453 0.072418\n", + "70 4 None mnist chi2_cpd deepstrom 0.9456 0.047744 750.139674 0.9452 0.091661" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_sorted_acc_for_dataset(df, \"mnist\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>--nys-size</th>\n", + " <th>--out-dim</th>\n", + " <th>dataset</th>\n", + " <th>kernel</th>\n", + " <th>network</th>\n", + " <th>test_acc</th>\n", + " <th>test_eval_time</th>\n", + " <th>training_time</th>\n", + " <th>val_acc</th>\n", + " <th>val_eval_time</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>38</th>\n", + " <td>None</td>\n", + " <td>64</td>\n", + " <td>cifar10</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.7776</td>\n", + " <td>3.851561</td>\n", + " <td>14389.172500</td>\n", + " <td>0.7790</td>\n", + " <td>6.267717</td>\n", + " </tr>\n", + " <tr>\n", + " <th>55</th>\n", + " <td>None</td>\n", + " <td>128</td>\n", + " <td>cifar10</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.7656</td>\n", + " <td>3.849130</td>\n", + " <td>14380.838030</td>\n", + " <td>0.7683</td>\n", + " <td>6.270864</td>\n", + " </tr>\n", + " <tr>\n", + " <th>52</th>\n", + " <td>None</td>\n", + " <td>1024</td>\n", + " <td>cifar10</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.7643</td>\n", + " <td>3.862283</td>\n", + " <td>14470.796952</td>\n", + " <td>0.7606</td>\n", + " <td>6.280409</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>None</td>\n", + " <td>16</td>\n", + " <td>cifar10</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.7588</td>\n", + " <td>3.575382</td>\n", + " <td>14157.014869</td>\n", + " <td>0.7657</td>\n", + " <td>5.747157</td>\n", + " </tr>\n", + " <tr>\n", + " <th>51</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7479</td>\n", + " <td>6.846244</td>\n", + " <td>87033.216096</td>\n", + " <td>0.7405</td>\n", + " <td>9.329525</td>\n", + " </tr>\n", + " <tr>\n", + " <th>22</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7433</td>\n", + " <td>4.010236</td>\n", + " <td>19910.613283</td>\n", + " <td>0.7361</td>\n", + " <td>6.501417</td>\n", + " </tr>\n", + " <tr>\n", + " <th>43</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7405</td>\n", + " <td>5.432825</td>\n", + " <td>53063.696264</td>\n", + " <td>0.7363</td>\n", + " <td>7.898510</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7379</td>\n", + " <td>4.370653</td>\n", + " <td>34882.018647</td>\n", + " <td>0.7358</td>\n", + " <td>6.602529</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7306</td>\n", + " <td>4.136106</td>\n", + " <td>22086.981499</td>\n", + " <td>0.7336</td>\n", + " <td>6.612154</td>\n", + " </tr>\n", + " <tr>\n", + " <th>20</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7257</td>\n", + " <td>3.999178</td>\n", + " <td>27069.076405</td>\n", + " <td>0.7262</td>\n", + " <td>6.233111</td>\n", + " </tr>\n", + " <tr>\n", + " <th>46</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.7246</td>\n", + " <td>4.051840</td>\n", + " <td>21110.480839</td>\n", + " <td>0.7287</td>\n", + " <td>6.506875</td>\n", + " </tr>\n", + " <tr>\n", + " <th>31</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>4.011486</td>\n", + " <td>19580.249264</td>\n", + " <td>0.0947</td>\n", + " <td>6.453061</td>\n", + " </tr>\n", + " <tr>\n", + " <th>28</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>3.999425</td>\n", + " <td>20588.263982</td>\n", + " <td>0.0947</td>\n", + " <td>6.449730</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>5.874875</td>\n", + " <td>82356.760107</td>\n", + " <td>0.0947</td>\n", + " <td>8.360661</td>\n", + " </tr>\n", + " <tr>\n", + " <th>23</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>4.876681</td>\n", + " <td>50572.784957</td>\n", + " <td>0.0947</td>\n", + " <td>7.366312</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>4.089114</td>\n", + " <td>34239.797556</td>\n", + " <td>0.0947</td>\n", + " <td>6.307771</td>\n", + " </tr>\n", + " <tr>\n", + " <th>66</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>3.705690</td>\n", + " <td>21834.584799</td>\n", + " <td>0.0947</td>\n", + " <td>5.931691</td>\n", + " </tr>\n", + " <tr>\n", + " <th>67</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>cifar10</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1000</td>\n", + " <td>3.857690</td>\n", + " <td>26705.858757</td>\n", + " <td>0.0947</td>\n", + " <td>6.085833</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", + "38 None 64 cifar10 None dense 0.7776 3.851561 14389.172500 0.7790 6.267717\n", + "55 None 128 cifar10 None dense 0.7656 3.849130 14380.838030 0.7683 6.270864\n", + "52 None 1024 cifar10 None dense 0.7643 3.862283 14470.796952 0.7606 6.280409\n", + "7 None 16 cifar10 None dense 0.7588 3.575382 14157.014869 0.7657 5.747157\n", + "51 512 None cifar10 chi2_cpd deepstrom 0.7479 6.846244 87033.216096 0.7405 9.329525\n", + "22 4 None cifar10 chi2_cpd deepstrom 0.7433 4.010236 19910.613283 0.7361 6.501417\n", + "43 256 None cifar10 chi2_cpd deepstrom 0.7405 5.432825 53063.696264 0.7363 7.898510\n", + "36 128 None cifar10 chi2_cpd deepstrom 0.7379 4.370653 34882.018647 0.7358 6.602529\n", + "2 16 None cifar10 chi2_cpd deepstrom 0.7306 4.136106 22086.981499 0.7336 6.612154\n", + "20 64 None cifar10 chi2_cpd deepstrom 0.7257 3.999178 27069.076405 0.7262 6.233111\n", + "46 8 None cifar10 chi2_cpd deepstrom 0.7246 4.051840 21110.480839 0.7287 6.506875\n", + "31 4 None cifar10 linear deepstrom 0.1000 4.011486 19580.249264 0.0947 6.453061\n", + "28 8 None cifar10 linear deepstrom 0.1000 3.999425 20588.263982 0.0947 6.449730\n", + "47 512 None cifar10 linear deepstrom 0.1000 5.874875 82356.760107 0.0947 8.360661\n", + "23 256 None cifar10 linear deepstrom 0.1000 4.876681 50572.784957 0.0947 7.366312\n", + "11 128 None cifar10 linear deepstrom 0.1000 4.089114 34239.797556 0.0947 6.307771\n", + "66 16 None cifar10 linear deepstrom 0.1000 3.705690 21834.584799 0.0947 5.931691\n", + "67 64 None cifar10 linear deepstrom 0.1000 3.857690 26705.858757 0.0947 6.085833" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_sorted_acc_for_dataset(df, \"cifar10\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>--nys-size</th>\n", + " <th>--out-dim</th>\n", + " <th>dataset</th>\n", + " <th>kernel</th>\n", + " <th>network</th>\n", + " <th>test_acc</th>\n", + " <th>test_eval_time</th>\n", + " <th>training_time</th>\n", + " <th>val_acc</th>\n", + " <th>val_eval_time</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>50</th>\n", + " <td>None</td>\n", + " <td>1024</td>\n", + " <td>cifar100</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.3479</td>\n", + " <td>3.547975</td>\n", + " <td>14130.525702</td>\n", + " <td>0.3364</td>\n", + " <td>5.697969</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16</th>\n", + " <td>None</td>\n", + " <td>128</td>\n", + " <td>cifar100</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.3388</td>\n", + " <td>3.524847</td>\n", + " <td>14074.119773</td>\n", + " <td>0.3329</td>\n", + " <td>5.684675</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.2585</td>\n", + " <td>4.339325</td>\n", + " <td>27720.096254</td>\n", + " <td>0.2508</td>\n", + " <td>6.800864</td>\n", + " </tr>\n", + " <tr>\n", + " <th>57</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.2043</td>\n", + " <td>3.971535</td>\n", + " <td>19768.391855</td>\n", + " <td>0.1966</td>\n", + " <td>6.418263</td>\n", + " </tr>\n", + " <tr>\n", + " <th>29</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1991</td>\n", + " <td>5.475031</td>\n", + " <td>53419.870877</td>\n", + " <td>0.1887</td>\n", + " <td>7.927623</td>\n", + " </tr>\n", + " <tr>\n", + " <th>27</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1983</td>\n", + " <td>4.717442</td>\n", + " <td>36788.966420</td>\n", + " <td>0.1876</td>\n", + " <td>7.193454</td>\n", + " </tr>\n", + " <tr>\n", + " <th>40</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1952</td>\n", + " <td>3.694020</td>\n", + " <td>21831.538531</td>\n", + " <td>0.1890</td>\n", + " <td>5.934045</td>\n", + " </tr>\n", + " <tr>\n", + " <th>62</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1623</td>\n", + " <td>3.718879</td>\n", + " <td>20875.334670</td>\n", + " <td>0.1606</td>\n", + " <td>5.946196</td>\n", + " </tr>\n", + " <tr>\n", + " <th>64</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.1587</td>\n", + " <td>6.489950</td>\n", + " <td>81977.486589</td>\n", + " <td>0.1563</td>\n", + " <td>8.722982</td>\n", + " </tr>\n", + " <tr>\n", + " <th>61</th>\n", + " <td>None</td>\n", + " <td>64</td>\n", + " <td>cifar100</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.0100</td>\n", + " <td>3.809767</td>\n", + " <td>14162.506632</td>\n", + " <td>0.0083</td>\n", + " <td>6.197990</td>\n", + " </tr>\n", + " <tr>\n", + " <th>54</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>4.521444</td>\n", + " <td>48345.980519</td>\n", + " <td>0.0083</td>\n", + " <td>6.749054</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>3.634902</td>\n", + " <td>20741.875956</td>\n", + " <td>0.0083</td>\n", + " <td>5.885382</td>\n", + " </tr>\n", + " <tr>\n", + " <th>49</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>3.655856</td>\n", + " <td>21732.213368</td>\n", + " <td>0.0083</td>\n", + " <td>5.886336</td>\n", + " </tr>\n", + " <tr>\n", + " <th>33</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>4.235058</td>\n", + " <td>26857.990116</td>\n", + " <td>0.0083</td>\n", + " <td>6.687950</td>\n", + " </tr>\n", + " <tr>\n", + " <th>21</th>\n", + " <td>None</td>\n", + " <td>16</td>\n", + " <td>cifar100</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.0100</td>\n", + " <td>3.837857</td>\n", + " <td>14150.901807</td>\n", + " <td>0.0083</td>\n", + " <td>6.251673</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>5.467176</td>\n", + " <td>78125.019147</td>\n", + " <td>0.0083</td>\n", + " <td>7.815155</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>4.414209</td>\n", + " <td>35154.659761</td>\n", + " <td>0.0083</td>\n", + " <td>6.863228</td>\n", + " </tr>\n", + " <tr>\n", + " <th>69</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>cifar100</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.0100</td>\n", + " <td>3.613290</td>\n", + " <td>19602.906152</td>\n", + " <td>0.0083</td>\n", + " <td>5.825223</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", + "50 None 1024 cifar100 None dense 0.3479 3.547975 14130.525702 0.3364 5.697969\n", + "16 None 128 cifar100 None dense 0.3388 3.524847 14074.119773 0.3329 5.684675\n", + "3 64 None cifar100 chi2_cpd deepstrom 0.2585 4.339325 27720.096254 0.2508 6.800864\n", + "57 4 None cifar100 chi2_cpd deepstrom 0.2043 3.971535 19768.391855 0.1966 6.418263\n", + "29 256 None cifar100 chi2_cpd deepstrom 0.1991 5.475031 53419.870877 0.1887 7.927623\n", + "27 128 None cifar100 chi2_cpd deepstrom 0.1983 4.717442 36788.966420 0.1876 7.193454\n", + "40 16 None cifar100 chi2_cpd deepstrom 0.1952 3.694020 21831.538531 0.1890 5.934045\n", + "62 8 None cifar100 chi2_cpd deepstrom 0.1623 3.718879 20875.334670 0.1606 5.946196\n", + "64 512 None cifar100 chi2_cpd deepstrom 0.1587 6.489950 81977.486589 0.1563 8.722982\n", + "61 None 64 cifar100 None dense 0.0100 3.809767 14162.506632 0.0083 6.197990\n", + "54 256 None cifar100 linear deepstrom 0.0100 4.521444 48345.980519 0.0083 6.749054\n", + "1 8 None cifar100 linear deepstrom 0.0100 3.634902 20741.875956 0.0083 5.885382\n", + "49 16 None cifar100 linear deepstrom 0.0100 3.655856 21732.213368 0.0083 5.886336\n", + "33 64 None cifar100 linear deepstrom 0.0100 4.235058 26857.990116 0.0083 6.687950\n", + "21 None 16 cifar100 None dense 0.0100 3.837857 14150.901807 0.0083 6.251673\n", + "10 512 None cifar100 linear deepstrom 0.0100 5.467176 78125.019147 0.0083 7.815155\n", + "9 128 None cifar100 linear deepstrom 0.0100 4.414209 35154.659761 0.0083 6.863228\n", + "69 4 None cifar100 linear deepstrom 0.0100 3.613290 19602.906152 0.0083 5.825223" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_sorted_acc_for_dataset(df, \"cifar100\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>--nys-size</th>\n", + " <th>--out-dim</th>\n", + " <th>dataset</th>\n", + " <th>kernel</th>\n", + " <th>network</th>\n", + " <th>test_acc</th>\n", + " <th>test_eval_time</th>\n", + " <th>training_time</th>\n", + " <th>val_acc</th>\n", + " <th>val_eval_time</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>None</td>\n", + " <td>128</td>\n", + " <td>svhn</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.941009</td>\n", + " <td>9.443329</td>\n", + " <td>22538.016228</td>\n", + " <td>0.9339</td>\n", + " <td>5.747079</td>\n", + " </tr>\n", + " <tr>\n", + " <th>32</th>\n", + " <td>None</td>\n", + " <td>16</td>\n", + " <td>svhn</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.940815</td>\n", + " <td>9.270262</td>\n", + " <td>22534.473243</td>\n", + " <td>0.9361</td>\n", + " <td>5.683755</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>None</td>\n", + " <td>64</td>\n", + " <td>svhn</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.940787</td>\n", + " <td>9.433461</td>\n", + " <td>22535.162152</td>\n", + " <td>0.9350</td>\n", + " <td>5.748816</td>\n", + " </tr>\n", + " <tr>\n", + " <th>44</th>\n", + " <td>256</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.937454</td>\n", + " <td>14.281184</td>\n", + " <td>83866.884516</td>\n", + " <td>0.9326</td>\n", + " <td>7.820895</td>\n", + " </tr>\n", + " <tr>\n", + " <th>30</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.937407</td>\n", + " <td>18.118679</td>\n", + " <td>137458.785191</td>\n", + " <td>0.9312</td>\n", + " <td>9.242190</td>\n", + " </tr>\n", + " <tr>\n", + " <th>56</th>\n", + " <td>None</td>\n", + " <td>1024</td>\n", + " <td>svhn</td>\n", + " <td>None</td>\n", + " <td>dense</td>\n", + " <td>0.937000</td>\n", + " <td>10.360103</td>\n", + " <td>23155.441453</td>\n", + " <td>0.9342</td>\n", + " <td>6.369419</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>512</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.936324</td>\n", + " <td>15.367678</td>\n", + " <td>133449.591165</td>\n", + " <td>0.9303</td>\n", + " <td>8.193455</td>\n", + " </tr>\n", + " <tr>\n", + " <th>65</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.935120</td>\n", + " <td>12.290664</td>\n", + " <td>57845.390112</td>\n", + " <td>0.9309</td>\n", + " <td>7.054313</td>\n", + " </tr>\n", + " <tr>\n", + " <th>17</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.933824</td>\n", + " <td>11.180088</td>\n", + " <td>43996.453977</td>\n", + " <td>0.9315</td>\n", + " <td>6.699816</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.932556</td>\n", + " <td>9.698029</td>\n", + " <td>33257.878631</td>\n", + " <td>0.9280</td>\n", + " <td>5.919757</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>64</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.931815</td>\n", + " <td>10.448107</td>\n", + " <td>42970.862907</td>\n", + " <td>0.9307</td>\n", + " <td>6.198442</td>\n", + " </tr>\n", + " <tr>\n", + " <th>48</th>\n", + " <td>128</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.931787</td>\n", + " <td>11.711458</td>\n", + " <td>56833.877055</td>\n", + " <td>0.9291</td>\n", + " <td>6.837168</td>\n", + " </tr>\n", + " <tr>\n", + " <th>34</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.931528</td>\n", + " <td>9.722512</td>\n", + " <td>31789.523167</td>\n", + " <td>0.9292</td>\n", + " <td>5.931942</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>chi2_cpd</td>\n", + " <td>deepstrom</td>\n", + " <td>0.929741</td>\n", + " <td>9.828513</td>\n", + " <td>34855.966583</td>\n", + " <td>0.9305</td>\n", + " <td>5.963734</td>\n", + " </tr>\n", + " <tr>\n", + " <th>42</th>\n", + " <td>16</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.196694</td>\n", + " <td>9.705651</td>\n", + " <td>34650.985853</td>\n", + " <td>0.1881</td>\n", + " <td>5.946775</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>8</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.196694</td>\n", + " <td>9.592059</td>\n", + " <td>33089.771927</td>\n", + " <td>0.1881</td>\n", + " <td>5.880033</td>\n", + " </tr>\n", + " <tr>\n", + " <th>60</th>\n", + " <td>4</td>\n", + " <td>None</td>\n", + " <td>svhn</td>\n", + " <td>linear</td>\n", + " <td>deepstrom</td>\n", + " <td>0.196694</td>\n", + " <td>9.709503</td>\n", + " <td>31571.430093</td>\n", + " <td>0.1881</td>\n", + " <td>5.931994</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", + "8 None 128 svhn None dense 0.941009 9.443329 22538.016228 0.9339 5.747079\n", + "32 None 16 svhn None dense 0.940815 9.270262 22534.473243 0.9361 5.683755\n", + "6 None 64 svhn None dense 0.940787 9.433461 22535.162152 0.9350 5.748816\n", + "44 256 None svhn chi2_cpd deepstrom 0.937454 14.281184 83866.884516 0.9326 7.820895\n", + "30 512 None svhn chi2_cpd deepstrom 0.937407 18.118679 137458.785191 0.9312 9.242190\n", + "56 None 1024 svhn None dense 0.937000 10.360103 23155.441453 0.9342 6.369419\n", + "5 512 None svhn linear deepstrom 0.936324 15.367678 133449.591165 0.9303 8.193455\n", + "65 128 None svhn chi2_cpd deepstrom 0.935120 12.290664 57845.390112 0.9309 7.054313\n", + "17 64 None svhn linear deepstrom 0.933824 11.180088 43996.453977 0.9315 6.699816\n", + "19 8 None svhn chi2_cpd deepstrom 0.932556 9.698029 33257.878631 0.9280 5.919757\n", + "15 64 None svhn chi2_cpd deepstrom 0.931815 10.448107 42970.862907 0.9307 6.198442\n", + "48 128 None svhn linear deepstrom 0.931787 11.711458 56833.877055 0.9291 6.837168\n", + "34 4 None svhn chi2_cpd deepstrom 0.931528 9.722512 31789.523167 0.9292 5.931942\n", + "4 16 None svhn chi2_cpd deepstrom 0.929741 9.828513 34855.966583 0.9305 5.963734\n", + "42 16 None svhn linear deepstrom 0.196694 9.705651 34650.985853 0.1881 5.946775\n", + "12 8 None svhn linear deepstrom 0.196694 9.592059 33089.771927 0.1881 5.880033\n", + "60 4 None svhn linear deepstrom 0.196694 9.709503 31571.430093 0.1881 5.931994" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_sorted_acc_for_dataset(df, \"svhn\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2018-11-07 09:46:39,143 [16826] DEBUG root: Nystrom possible sizes are: {'4', '512', '8', '256', '128', '64', '16'}\n", + "2018-11-07 09:46:39,145 [16826] DEBUG root: Kernel functions are: {'linear', 'chi2_cpd'}\n", + "2018-11-07 09:46:39,146 [16826] DEBUG root: Compared network types are: {'deepstrom', 'dense'}\n", + "2018-11-07 09:46:39,147 [16826] DEBUG root: Tested representation dimension are: {'1024', '128', '64', '16'}\n" + ] + } + ], + "source": [ + "method_names = set(df[\"network\"].values)\n", + "kernel_names = set(df[\"kernel\"].values)\n", + "kernel_names.remove(\"None\")\n", + "repr_dim = set(df[\"--out-dim\"].values)\n", + "repr_dim.remove(\"None\") # dtype: str\n", + "nys_size = set(df[\"--nys-size\"].values)\n", + "nys_size.remove(\"None\")\n", + "datasets = set(df[\"dataset\"])\n", + "\n", + "logger.debug(\"Nystrom possible sizes are: {}\".format(nys_size))\n", + "logger.debug(\"Kernel functions are: {}\".format(kernel_names))\n", + "logger.debug(\"Compared network types are: {}\".format(method_names))\n", + "logger.debug(\"Tested representation dimension are: {}\".format(repr_dim))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "nb_classes_datasets = {\n", + " \"svhn\": 10,\n", + " \"cifar10\": 10,\n", + " \"mnist\": 10,\n", + " \"cifar100\": 100\n", + "}\n", + "\n", + "nb_feature_convs = {\n", + " \"svhn\": 512,\n", + " \"cifar10\": 512,\n", + " \"mnist\": 16,\n", + " \"cifar100\": 512\n", + "}\n", + "\n", + "min_acc = 0\n", + "max_acc = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "def post_processing_figures(f, ax, nbparamdeepstrom, subsample_sizes):\n", + " ax.set_ylim(min_acc, max_acc)\n", + " ax.set_ylabel(\"Accuracy\")\n", + " ax.set_xticks([1e4, 1e5, 1e6])\n", + " ax.set_xlabel(\"# Learnable Parameters\")\n", + " ax.legend(bbox_to_anchor=(0.5, -0.20), loc=\"upper center\", ncol=2)\n", + " ax.set_xticklabels([1e4, 1e5, 1e6])\n", + " ax.set_xscale(\"symlog\")\n", + "\n", + " ax_twin = ax.twiny()\n", + " ax_twin.set_xscale(\"symlog\")\n", + " ax_twin.set_xlim(ax.get_xlim())\n", + " ax_twin.set_xticks(sorted(nbparamdeepstrom))\n", + " ax_twin.set_xticklabels(sorted(subsample_sizes))\n", + " ax_twin.set_xlabel(\"Subsample Size\")\n", + " ax.set_title(\"{}\".format(DATANAME), y=1.2)\n", + "\n", + " f.set_size_inches(8, 6)\n", + " f.tight_layout()\n", + " f.subplots_adjust(bottom=0.3)\n", + "\n", + " out_name = \"end_to_end_{}\".format(DATANAME)\n", + "\n", + " base_out_dir = os.path.abspath(__file__.split(\".\")[0])\n", + " base_out_dir_path = pathlib.Path(base_out_dir) / \"images\"\n", + " base_out_dir_path.mkdir(parents=True, exist_ok=True)\n", + " out_path = obase_out_dir_path / out_name\n", + " logger.debug(out_path)\n", + " f.savefig(out_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name '__file__' is not defined", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-47-01e3edb84776>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0msorted_idx_dense\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margsort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp_param_dense\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp_param_dense\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_idx_dense\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccuracies_dense\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_idx_dense\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmarker\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"o\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mf\"Dense\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mpost_processing_figures\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp_param\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubsample_sizes_kernel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m<ipython-input-46-99b79cbcf53c>\u001b[0m in \u001b[0;36mpost_processing_figures\u001b[0;34m(f, ax, nbparamdeepstrom, subsample_sizes)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mout_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"end_to_end_{}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDATANAME\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mbase_out_dir\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabspath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m__file__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\".\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0mbase_out_dir_path\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpathlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mPath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase_out_dir\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m\"images\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0mbase_out_dir_path\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmkdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparents\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexist_ok\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name '__file__' is not defined" + ], + "output_type": "error" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 576x432 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for DATANAME in datasets:\n", + " df_data = df[df[\"dataset\"] == DATANAME]\n", + " nb_classes_dataset = nb_classes_datasets[DATANAME]\n", + " nb_feature_conv = nb_feature_convs[DATANAME]\n", + " f, ax = plt.subplots()\n", + " for k_name in kernel_names:\n", + " df_kernel = df_data[df_data[\"kernel\"] == k_name]\n", + " accuracies_kernel = df_kernel[\"test_acc\"]\n", + " subsample_sizes_kernel = df_kernel[\"--nys-size\"].astype(int)\n", + " np_param = (np.square(subsample_sizes_kernel) + # m x m\n", + " subsample_sizes_kernel * nb_classes_dataset) # m x c\n", + " sorted_idx = np.argsort(np_param.values)\n", + " ax.plot(np_param.values[sorted_idx], accuracies_kernel.values[sorted_idx], marker=\"x\", label=f\"Deepstrom {k_name}\")\n", + " \n", + " df_dense = df_data[df_data[\"network\"] == \"dense\"]\n", + " accuracies_dense = df_dense[\"test_acc\"]\n", + " out_dim_dense = df_dense[\"--out-dim\"].astype(int)\n", + " np_param_dense = (nb_feature_conv * out_dim_dense + # d x D\n", + " out_dim_dense * nb_classes_dataset) # D x c\n", + " sorted_idx_dense = np.argsort(np_param_dense.values)\n", + " ax.plot(np_param_dense.values[sorted_idx_dense], accuracies_dense.values[sorted_idx_dense], marker=\"o\", label=f\"Dense\")\n", + " post_processing_figures(f, ax, np_param, subsample_sizes_kernel)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end_2_layers_only_dense.ipynb b/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end_2_layers_only_dense.ipynb index 2b729e5c419996fd1a23e1ebbd17e3bea8c75b7e..54fc6397e02451bcfebd2c29d394b6e7cf9dc9cc 100644 --- a/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end_2_layers_only_dense.ipynb +++ b/main/experiments/graph_drawing/november_2018/classif_end_with_2_layers_only_dense/classif_end_to_end_2_layers_only_dense.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 38, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -16,56 +16,13 @@ "from skluc.main.utils import logger\n", "\n", "matplotlib.rcParams.update({'font.size': 14})\n", - "pd.set_option('display.expand_frame_repr', False)" + "pd.set_option('display.expand_frame_repr', False)\n", + "pd.set_option(\"display.max_columns\", 100)" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def build_df():\n", - " filepath = os.path.join(DIRNAME_BIG, FILENAME_BIG)\n", - " df = pd.read_csv(filepath)\n", - " df = df.apply(pd.to_numeric, errors=\"ignore\")\n", - " df = df.drop_duplicates()\n", - " col_to_delete = ['--batch-size', '--chi-square-PD-kernel', '--chi-square-kernel',\n", - " '--cifar10', '--cifar100', '--exp-chi-square-kernel',\n", - " '--intercept-constant', '--laplacian-kernel', '--linear-kernel',\n", - " '--mnist', '--quiet', '--rbf-kernel',\n", - " '--sigmoid-kernel', '--stacked-kernel', '--sumed-kernel', '--svhn',\n", - " '--tensorboard', '--validation-size',\n", - " 'deepfriedconvnet', 'deepstrom','dense', \"--gamma\", \"--nb-stack\", \n", - " \"--non-linear\", \"--non-linearity\", \"--num-epoch\", \"--seed\",\n", - " \"--train-size\", \"--second-layer-size\", \"activation_function\",\n", - " \"deepstrom_activation\", \"--real-fastfood\", \"--real-nystrom\"\n", - " ]\n", - " for c in col_to_delete:\n", - " df = df.drop([c], axis=1)\n", - "\n", - " return df\n", - "\n", - "DIRNAME_BIG = \"/home/luc/Resultats/Deepstrom/october_2018/classif_end_to_end\"\n", - "FILENAME_BIG = \"gathered_results.csv\"\n", - "df = build_df()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def get_sorted_acc_for_dataset(df_, dataset):\n", - " df_dataset = df_[df_.dataset == dataset]\n", - " df_dataset = df_dataset.sort_values(by=\"test_acc\", ascending=False)\n", - " return df_dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 4, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -89,10 +46,12 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>--nys-size</th>\n", + " <th>--batch-size</th>\n", + " <th>--non-linear</th>\n", + " <th>--num-epoch</th>\n", " <th>--out-dim</th>\n", + " <th>activation_function</th>\n", " <th>dataset</th>\n", - " <th>kernel</th>\n", " <th>network</th>\n", " <th>test_acc</th>\n", " <th>test_eval_time</th>\n", @@ -103,1330 +62,121 @@ " </thead>\n", " <tbody>\n", " <tr>\n", - " <th>53</th>\n", - " <td>None</td>\n", - " <td>1024</td>\n", - " <td>mnist</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.9908</td>\n", - " <td>0.046835</td>\n", - " <td>692.606522</td>\n", - " <td>0.9908</td>\n", - " <td>0.093102</td>\n", - " </tr>\n", - " <tr>\n", - " <th>25</th>\n", - " <td>None</td>\n", - " <td>128</td>\n", - " <td>mnist</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.9879</td>\n", - " <td>0.059532</td>\n", - " <td>647.076592</td>\n", - " <td>0.9888</td>\n", - " <td>0.070084</td>\n", - " </tr>\n", - " <tr>\n", - " <th>45</th>\n", - " <td>None</td>\n", - " <td>64</td>\n", - " <td>mnist</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.9874</td>\n", - " <td>0.058991</td>\n", - " <td>643.130677</td>\n", - " <td>0.9887</td>\n", - " <td>0.068697</td>\n", - " </tr>\n", - " <tr>\n", - " <th>68</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9852</td>\n", - " <td>0.052776</td>\n", - " <td>1258.943433</td>\n", - " <td>0.9846</td>\n", - " <td>0.103054</td>\n", - " </tr>\n", - " <tr>\n", - " <th>18</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9845</td>\n", - " <td>0.064160</td>\n", - " <td>1008.505888</td>\n", - " <td>0.9848</td>\n", - " <td>0.079071</td>\n", - " </tr>\n", - " <tr>\n", - " <th>59</th>\n", - " <td>None</td>\n", - " <td>16</td>\n", - " <td>mnist</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.9838</td>\n", - " <td>0.063164</td>\n", - " <td>637.988250</td>\n", - " <td>0.9849</td>\n", - " <td>0.078794</td>\n", - " </tr>\n", - " <tr>\n", - " <th>41</th>\n", - " <td>64</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9816</td>\n", - " <td>0.044161</td>\n", - " <td>864.483099</td>\n", - " <td>0.9813</td>\n", - " <td>0.093081</td>\n", - " </tr>\n", - " <tr>\n", - " <th>63</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9813</td>\n", - " <td>0.064762</td>\n", - " <td>1815.580290</td>\n", - " <td>0.9813</td>\n", - " <td>0.115415</td>\n", - " </tr>\n", - " <tr>\n", - " <th>13</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9813</td>\n", - " <td>0.043917</td>\n", - " <td>773.847790</td>\n", - " <td>0.9783</td>\n", - " <td>0.092328</td>\n", - " </tr>\n", - " <tr>\n", " <th>0</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9813</td>\n", - " <td>0.186224</td>\n", - " <td>1401.125618</td>\n", - " <td>0.9782</td>\n", - " <td>0.202431</td>\n", - " </tr>\n", - " <tr>\n", - " <th>24</th>\n", " <td>64</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9795</td>\n", - " <td>0.121712</td>\n", - " <td>1100.418470</td>\n", - " <td>0.9778</td>\n", - " <td>0.136375</td>\n", - " </tr>\n", - " <tr>\n", - " <th>39</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9792</td>\n", - " <td>0.300938</td>\n", - " <td>1987.493944</td>\n", - " <td>0.9801</td>\n", - " <td>0.326709</td>\n", - " </tr>\n", - " <tr>\n", - " <th>26</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9789</td>\n", - " <td>0.058784</td>\n", - " <td>871.508166</td>\n", - " <td>0.9780</td>\n", - " <td>0.109170</td>\n", - " </tr>\n", - " <tr>\n", - " <th>14</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9758</td>\n", - " <td>0.564625</td>\n", - " <td>3119.552520</td>\n", - " <td>0.9751</td>\n", - " <td>0.616923</td>\n", - " </tr>\n", - " <tr>\n", - " <th>35</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9729</td>\n", - " <td>0.059439</td>\n", - " <td>727.739111</td>\n", - " <td>0.9707</td>\n", - " <td>0.070918</td>\n", - " </tr>\n", - " <tr>\n", - " <th>37</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9718</td>\n", - " <td>0.066200</td>\n", - " <td>804.819344</td>\n", - " <td>0.9663</td>\n", - " <td>0.079810</td>\n", - " </tr>\n", - " <tr>\n", - " <th>58</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9498</td>\n", - " <td>0.059206</td>\n", - " <td>728.185049</td>\n", - " <td>0.9453</td>\n", - " <td>0.072418</td>\n", - " </tr>\n", - " <tr>\n", - " <th>70</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>mnist</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.9456</td>\n", - " <td>0.047744</td>\n", - " <td>750.139674</td>\n", - " <td>0.9452</td>\n", - " <td>0.091661</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", - "53 None 1024 mnist None dense 0.9908 0.046835 692.606522 0.9908 0.093102\n", - "25 None 128 mnist None dense 0.9879 0.059532 647.076592 0.9888 0.070084\n", - "45 None 64 mnist None dense 0.9874 0.058991 643.130677 0.9887 0.068697\n", - "68 256 None mnist linear deepstrom 0.9852 0.052776 1258.943433 0.9846 0.103054\n", - "18 128 None mnist linear deepstrom 0.9845 0.064160 1008.505888 0.9848 0.079071\n", - "59 None 16 mnist None dense 0.9838 0.063164 637.988250 0.9849 0.078794\n", - "41 64 None mnist linear deepstrom 0.9816 0.044161 864.483099 0.9813 0.093081\n", - "63 512 None mnist linear deepstrom 0.9813 0.064762 1815.580290 0.9813 0.115415\n", - "13 16 None mnist linear deepstrom 0.9813 0.043917 773.847790 0.9783 0.092328\n", - "0 128 None mnist chi2_cpd deepstrom 0.9813 0.186224 1401.125618 0.9782 0.202431\n", - "24 64 None mnist chi2_cpd deepstrom 0.9795 0.121712 1100.418470 0.9778 0.136375\n", - "39 256 None mnist chi2_cpd deepstrom 0.9792 0.300938 1987.493944 0.9801 0.326709\n", - "26 16 None mnist chi2_cpd deepstrom 0.9789 0.058784 871.508166 0.9780 0.109170\n", - "14 512 None mnist chi2_cpd deepstrom 0.9758 0.564625 3119.552520 0.9751 0.616923\n", - "35 8 None mnist linear deepstrom 0.9729 0.059439 727.739111 0.9707 0.070918\n", - "37 8 None mnist chi2_cpd deepstrom 0.9718 0.066200 804.819344 0.9663 0.079810\n", - "58 4 None mnist linear deepstrom 0.9498 0.059206 728.185049 0.9453 0.072418\n", - "70 4 None mnist chi2_cpd deepstrom 0.9456 0.047744 750.139674 0.9452 0.091661" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_sorted_acc_for_dataset(df, \"mnist\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>--nys-size</th>\n", - " <th>--out-dim</th>\n", - " <th>dataset</th>\n", - " <th>kernel</th>\n", - " <th>network</th>\n", - " <th>test_acc</th>\n", - " <th>test_eval_time</th>\n", - " <th>training_time</th>\n", - " <th>val_acc</th>\n", - " <th>val_eval_time</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>38</th>\n", - " <td>None</td>\n", - " <td>64</td>\n", - " <td>cifar10</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.7776</td>\n", - " <td>3.851561</td>\n", - " <td>14389.172500</td>\n", - " <td>0.7790</td>\n", - " <td>6.267717</td>\n", - " </tr>\n", - " <tr>\n", - " <th>55</th>\n", - " <td>None</td>\n", - " <td>128</td>\n", - " <td>cifar10</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.7656</td>\n", - " <td>3.849130</td>\n", - " <td>14380.838030</td>\n", - " <td>0.7683</td>\n", - " <td>6.270864</td>\n", - " </tr>\n", - " <tr>\n", - " <th>52</th>\n", - " <td>None</td>\n", - " <td>1024</td>\n", - " <td>cifar10</td>\n", - " <td>None</td>\n", + " <td>False</td>\n", + " <td>500</td>\n", + " <td>4096</td>\n", + " <td><function relu at 0x7f51de3f6ea0></td>\n", + " <td>cifar100</td>\n", " <td>dense</td>\n", - " <td>0.7643</td>\n", - " <td>3.862283</td>\n", - " <td>14470.796952</td>\n", - " <td>0.7606</td>\n", - " <td>6.280409</td>\n", + " <td>0.0100</td>\n", + " <td>1.196356</td>\n", + " <td>17166.761853</td>\n", + " <td>0.0101</td>\n", + " <td>1.775822</td>\n", " </tr>\n", " <tr>\n", - " <th>7</th>\n", - " <td>None</td>\n", + " <th>1</th>\n", + " <td>64</td>\n", + " <td>False</td>\n", + " <td>500</td>\n", " <td>16</td>\n", - " <td>cifar10</td>\n", - " <td>None</td>\n", + " <td><function relu at 0x7fe0fa3f5c80></td>\n", + " <td>cifar100</td>\n", " <td>dense</td>\n", - " <td>0.7588</td>\n", - " <td>3.575382</td>\n", - " <td>14157.014869</td>\n", - " <td>0.7657</td>\n", - " <td>5.747157</td>\n", - " </tr>\n", - " <tr>\n", - " <th>51</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7479</td>\n", - " <td>6.846244</td>\n", - " <td>87033.216096</td>\n", - " <td>0.7405</td>\n", - " <td>9.329525</td>\n", - " </tr>\n", - " <tr>\n", - " <th>22</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7433</td>\n", - " <td>4.010236</td>\n", - " <td>19910.613283</td>\n", - " <td>0.7361</td>\n", - " <td>6.501417</td>\n", - " </tr>\n", - " <tr>\n", - " <th>43</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7405</td>\n", - " <td>5.432825</td>\n", - " <td>53063.696264</td>\n", - " <td>0.7363</td>\n", - " <td>7.898510</td>\n", - " </tr>\n", - " <tr>\n", - " <th>36</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7379</td>\n", - " <td>4.370653</td>\n", - " <td>34882.018647</td>\n", - " <td>0.7358</td>\n", - " <td>6.602529</td>\n", + " <td>0.0100</td>\n", + " <td>3.954176</td>\n", + " <td>35979.940399</td>\n", + " <td>0.0083</td>\n", + " <td>6.389008</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7306</td>\n", - " <td>4.136106</td>\n", - " <td>22086.981499</td>\n", - " <td>0.7336</td>\n", - " <td>6.612154</td>\n", - " </tr>\n", - " <tr>\n", - " <th>20</th>\n", - " <td>64</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7257</td>\n", - " <td>3.999178</td>\n", - " <td>27069.076405</td>\n", - " <td>0.7262</td>\n", - " <td>6.233111</td>\n", - " </tr>\n", - " <tr>\n", - " <th>46</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.7246</td>\n", - " <td>4.051840</td>\n", - " <td>21110.480839</td>\n", - " <td>0.7287</td>\n", - " <td>6.506875</td>\n", - " </tr>\n", - " <tr>\n", - " <th>31</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>4.011486</td>\n", - " <td>19580.249264</td>\n", - " <td>0.0947</td>\n", - " <td>6.453061</td>\n", - " </tr>\n", - " <tr>\n", - " <th>28</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>3.999425</td>\n", - " <td>20588.263982</td>\n", - " <td>0.0947</td>\n", - " <td>6.449730</td>\n", - " </tr>\n", - " <tr>\n", - " <th>47</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>5.874875</td>\n", - " <td>82356.760107</td>\n", - " <td>0.0947</td>\n", - " <td>8.360661</td>\n", - " </tr>\n", - " <tr>\n", - " <th>23</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>4.876681</td>\n", - " <td>50572.784957</td>\n", - " <td>0.0947</td>\n", - " <td>7.366312</td>\n", - " </tr>\n", - " <tr>\n", - " <th>11</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>4.089114</td>\n", - " <td>34239.797556</td>\n", - " <td>0.0947</td>\n", - " <td>6.307771</td>\n", - " </tr>\n", - " <tr>\n", - " <th>66</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>3.705690</td>\n", - " <td>21834.584799</td>\n", - " <td>0.0947</td>\n", - " <td>5.931691</td>\n", - " </tr>\n", - " <tr>\n", - " <th>67</th>\n", " <td>64</td>\n", - " <td>None</td>\n", - " <td>cifar10</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1000</td>\n", - " <td>3.857690</td>\n", - " <td>26705.858757</td>\n", - " <td>0.0947</td>\n", - " <td>6.085833</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", - "38 None 64 cifar10 None dense 0.7776 3.851561 14389.172500 0.7790 6.267717\n", - "55 None 128 cifar10 None dense 0.7656 3.849130 14380.838030 0.7683 6.270864\n", - "52 None 1024 cifar10 None dense 0.7643 3.862283 14470.796952 0.7606 6.280409\n", - "7 None 16 cifar10 None dense 0.7588 3.575382 14157.014869 0.7657 5.747157\n", - "51 512 None cifar10 chi2_cpd deepstrom 0.7479 6.846244 87033.216096 0.7405 9.329525\n", - "22 4 None cifar10 chi2_cpd deepstrom 0.7433 4.010236 19910.613283 0.7361 6.501417\n", - "43 256 None cifar10 chi2_cpd deepstrom 0.7405 5.432825 53063.696264 0.7363 7.898510\n", - "36 128 None cifar10 chi2_cpd deepstrom 0.7379 4.370653 34882.018647 0.7358 6.602529\n", - "2 16 None cifar10 chi2_cpd deepstrom 0.7306 4.136106 22086.981499 0.7336 6.612154\n", - "20 64 None cifar10 chi2_cpd deepstrom 0.7257 3.999178 27069.076405 0.7262 6.233111\n", - "46 8 None cifar10 chi2_cpd deepstrom 0.7246 4.051840 21110.480839 0.7287 6.506875\n", - "31 4 None cifar10 linear deepstrom 0.1000 4.011486 19580.249264 0.0947 6.453061\n", - "28 8 None cifar10 linear deepstrom 0.1000 3.999425 20588.263982 0.0947 6.449730\n", - "47 512 None cifar10 linear deepstrom 0.1000 5.874875 82356.760107 0.0947 8.360661\n", - "23 256 None cifar10 linear deepstrom 0.1000 4.876681 50572.784957 0.0947 7.366312\n", - "11 128 None cifar10 linear deepstrom 0.1000 4.089114 34239.797556 0.0947 6.307771\n", - "66 16 None cifar10 linear deepstrom 0.1000 3.705690 21834.584799 0.0947 5.931691\n", - "67 64 None cifar10 linear deepstrom 0.1000 3.857690 26705.858757 0.0947 6.085833" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_sorted_acc_for_dataset(df, \"cifar10\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>--nys-size</th>\n", - " <th>--out-dim</th>\n", - " <th>dataset</th>\n", - " <th>kernel</th>\n", - " <th>network</th>\n", - " <th>test_acc</th>\n", - " <th>test_eval_time</th>\n", - " <th>training_time</th>\n", - " <th>val_acc</th>\n", - " <th>val_eval_time</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>50</th>\n", - " <td>None</td>\n", + " <td>False</td>\n", + " <td>500</td>\n", " <td>1024</td>\n", + " <td><function relu at 0x7fab93676ea0></td>\n", " <td>cifar100</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.3479</td>\n", - " <td>3.547975</td>\n", - " <td>14130.525702</td>\n", - " <td>0.3364</td>\n", - " <td>5.697969</td>\n", - " </tr>\n", - " <tr>\n", - " <th>16</th>\n", - " <td>None</td>\n", - " <td>128</td>\n", - " <td>cifar100</td>\n", - " <td>None</td>\n", " <td>dense</td>\n", - " <td>0.3388</td>\n", - " <td>3.524847</td>\n", - " <td>14074.119773</td>\n", - " <td>0.3329</td>\n", - " <td>5.684675</td>\n", + " <td>0.0100</td>\n", + " <td>1.087150</td>\n", + " <td>15344.600691</td>\n", + " <td>0.0090</td>\n", + " <td>1.674889</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>64</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.2585</td>\n", - " <td>4.339325</td>\n", - " <td>27720.096254</td>\n", - " <td>0.2508</td>\n", - " <td>6.800864</td>\n", - " </tr>\n", - " <tr>\n", - " <th>57</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.2043</td>\n", - " <td>3.971535</td>\n", - " <td>19768.391855</td>\n", - " <td>0.1966</td>\n", - " <td>6.418263</td>\n", - " </tr>\n", - " <tr>\n", - " <th>29</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1991</td>\n", - " <td>5.475031</td>\n", - " <td>53419.870877</td>\n", - " <td>0.1887</td>\n", - " <td>7.927623</td>\n", - " </tr>\n", - " <tr>\n", - " <th>27</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1983</td>\n", - " <td>4.717442</td>\n", - " <td>36788.966420</td>\n", - " <td>0.1876</td>\n", - " <td>7.193454</td>\n", - " </tr>\n", - " <tr>\n", - " <th>40</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1952</td>\n", - " <td>3.694020</td>\n", - " <td>21831.538531</td>\n", - " <td>0.1890</td>\n", - " <td>5.934045</td>\n", - " </tr>\n", - " <tr>\n", - " <th>62</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1623</td>\n", - " <td>3.718879</td>\n", - " <td>20875.334670</td>\n", - " <td>0.1606</td>\n", - " <td>5.946196</td>\n", - " </tr>\n", - " <tr>\n", - " <th>64</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.1587</td>\n", - " <td>6.489950</td>\n", - " <td>81977.486589</td>\n", - " <td>0.1563</td>\n", - " <td>8.722982</td>\n", - " </tr>\n", - " <tr>\n", - " <th>61</th>\n", - " <td>None</td>\n", + " <td>False</td>\n", + " <td>500</td>\n", " <td>64</td>\n", + " <td><function relu at 0x7fd5f23f6ea0></td>\n", " <td>cifar100</td>\n", - " <td>None</td>\n", " <td>dense</td>\n", " <td>0.0100</td>\n", - " <td>3.809767</td>\n", - " <td>14162.506632</td>\n", - " <td>0.0083</td>\n", - " <td>6.197990</td>\n", - " </tr>\n", - " <tr>\n", - " <th>54</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>4.521444</td>\n", - " <td>48345.980519</td>\n", - " <td>0.0083</td>\n", - " <td>6.749054</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>3.634902</td>\n", - " <td>20741.875956</td>\n", - " <td>0.0083</td>\n", - " <td>5.885382</td>\n", - " </tr>\n", - " <tr>\n", - " <th>49</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>3.655856</td>\n", - " <td>21732.213368</td>\n", + " <td>1.264977</td>\n", + " <td>15864.949644</td>\n", " <td>0.0083</td>\n", - " <td>5.886336</td>\n", + " <td>1.830528</td>\n", " </tr>\n", " <tr>\n", - " <th>33</th>\n", + " <th>4</th>\n", " <td>64</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>4.235058</td>\n", - " <td>26857.990116</td>\n", - " <td>0.0083</td>\n", - " <td>6.687950</td>\n", - " </tr>\n", - " <tr>\n", - " <th>21</th>\n", - " <td>None</td>\n", - " <td>16</td>\n", - " <td>cifar100</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.0100</td>\n", - " <td>3.837857</td>\n", - " <td>14150.901807</td>\n", - " <td>0.0083</td>\n", - " <td>6.251673</td>\n", - " </tr>\n", - " <tr>\n", - " <th>10</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>5.467176</td>\n", - " <td>78125.019147</td>\n", - " <td>0.0083</td>\n", - " <td>7.815155</td>\n", - " </tr>\n", - " <tr>\n", - " <th>9</th>\n", + " <td>False</td>\n", + " <td>500</td>\n", " <td>128</td>\n", - " <td>None</td>\n", + " <td><function relu at 0x7f986e8b6ea0></td>\n", " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>4.414209</td>\n", - " <td>35154.659761</td>\n", - " <td>0.0083</td>\n", - " <td>6.863228</td>\n", - " </tr>\n", - " <tr>\n", - " <th>69</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>cifar100</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.0100</td>\n", - " <td>3.613290</td>\n", - " <td>19602.906152</td>\n", - " <td>0.0083</td>\n", - " <td>5.825223</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", - "50 None 1024 cifar100 None dense 0.3479 3.547975 14130.525702 0.3364 5.697969\n", - "16 None 128 cifar100 None dense 0.3388 3.524847 14074.119773 0.3329 5.684675\n", - "3 64 None cifar100 chi2_cpd deepstrom 0.2585 4.339325 27720.096254 0.2508 6.800864\n", - "57 4 None cifar100 chi2_cpd deepstrom 0.2043 3.971535 19768.391855 0.1966 6.418263\n", - "29 256 None cifar100 chi2_cpd deepstrom 0.1991 5.475031 53419.870877 0.1887 7.927623\n", - "27 128 None cifar100 chi2_cpd deepstrom 0.1983 4.717442 36788.966420 0.1876 7.193454\n", - "40 16 None cifar100 chi2_cpd deepstrom 0.1952 3.694020 21831.538531 0.1890 5.934045\n", - "62 8 None cifar100 chi2_cpd deepstrom 0.1623 3.718879 20875.334670 0.1606 5.946196\n", - "64 512 None cifar100 chi2_cpd deepstrom 0.1587 6.489950 81977.486589 0.1563 8.722982\n", - "61 None 64 cifar100 None dense 0.0100 3.809767 14162.506632 0.0083 6.197990\n", - "54 256 None cifar100 linear deepstrom 0.0100 4.521444 48345.980519 0.0083 6.749054\n", - "1 8 None cifar100 linear deepstrom 0.0100 3.634902 20741.875956 0.0083 5.885382\n", - "49 16 None cifar100 linear deepstrom 0.0100 3.655856 21732.213368 0.0083 5.886336\n", - "33 64 None cifar100 linear deepstrom 0.0100 4.235058 26857.990116 0.0083 6.687950\n", - "21 None 16 cifar100 None dense 0.0100 3.837857 14150.901807 0.0083 6.251673\n", - "10 512 None cifar100 linear deepstrom 0.0100 5.467176 78125.019147 0.0083 7.815155\n", - "9 128 None cifar100 linear deepstrom 0.0100 4.414209 35154.659761 0.0083 6.863228\n", - "69 4 None cifar100 linear deepstrom 0.0100 3.613290 19602.906152 0.0083 5.825223" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_sorted_acc_for_dataset(df, \"cifar100\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>--nys-size</th>\n", - " <th>--out-dim</th>\n", - " <th>dataset</th>\n", - " <th>kernel</th>\n", - " <th>network</th>\n", - " <th>test_acc</th>\n", - " <th>test_eval_time</th>\n", - " <th>training_time</th>\n", - " <th>val_acc</th>\n", - " <th>val_eval_time</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>8</th>\n", - " <td>None</td>\n", - " <td>128</td>\n", - " <td>svhn</td>\n", - " <td>None</td>\n", " <td>dense</td>\n", - " <td>0.941009</td>\n", - " <td>9.443329</td>\n", - " <td>22538.016228</td>\n", - " <td>0.9339</td>\n", - " <td>5.747079</td>\n", - " </tr>\n", - " <tr>\n", - " <th>32</th>\n", - " <td>None</td>\n", - " <td>16</td>\n", - " <td>svhn</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.940815</td>\n", - " <td>9.270262</td>\n", - " <td>22534.473243</td>\n", - " <td>0.9361</td>\n", - " <td>5.683755</td>\n", - " </tr>\n", - " <tr>\n", - " <th>6</th>\n", - " <td>None</td>\n", - " <td>64</td>\n", - " <td>svhn</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.940787</td>\n", - " <td>9.433461</td>\n", - " <td>22535.162152</td>\n", - " <td>0.9350</td>\n", - " <td>5.748816</td>\n", - " </tr>\n", - " <tr>\n", - " <th>44</th>\n", - " <td>256</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.937454</td>\n", - " <td>14.281184</td>\n", - " <td>83866.884516</td>\n", - " <td>0.9326</td>\n", - " <td>7.820895</td>\n", - " </tr>\n", - " <tr>\n", - " <th>30</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.937407</td>\n", - " <td>18.118679</td>\n", - " <td>137458.785191</td>\n", - " <td>0.9312</td>\n", - " <td>9.242190</td>\n", - " </tr>\n", - " <tr>\n", - " <th>56</th>\n", - " <td>None</td>\n", - " <td>1024</td>\n", - " <td>svhn</td>\n", - " <td>None</td>\n", - " <td>dense</td>\n", - " <td>0.937000</td>\n", - " <td>10.360103</td>\n", - " <td>23155.441453</td>\n", - " <td>0.9342</td>\n", - " <td>6.369419</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>512</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.936324</td>\n", - " <td>15.367678</td>\n", - " <td>133449.591165</td>\n", - " <td>0.9303</td>\n", - " <td>8.193455</td>\n", - " </tr>\n", - " <tr>\n", - " <th>65</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.935120</td>\n", - " <td>12.290664</td>\n", - " <td>57845.390112</td>\n", - " <td>0.9309</td>\n", - " <td>7.054313</td>\n", - " </tr>\n", - " <tr>\n", - " <th>17</th>\n", - " <td>64</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.933824</td>\n", - " <td>11.180088</td>\n", - " <td>43996.453977</td>\n", - " <td>0.9315</td>\n", - " <td>6.699816</td>\n", - " </tr>\n", - " <tr>\n", - " <th>19</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.932556</td>\n", - " <td>9.698029</td>\n", - " <td>33257.878631</td>\n", - " <td>0.9280</td>\n", - " <td>5.919757</td>\n", - " </tr>\n", - " <tr>\n", - " <th>15</th>\n", - " <td>64</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.931815</td>\n", - " <td>10.448107</td>\n", - " <td>42970.862907</td>\n", - " <td>0.9307</td>\n", - " <td>6.198442</td>\n", - " </tr>\n", - " <tr>\n", - " <th>48</th>\n", - " <td>128</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.931787</td>\n", - " <td>11.711458</td>\n", - " <td>56833.877055</td>\n", - " <td>0.9291</td>\n", - " <td>6.837168</td>\n", - " </tr>\n", - " <tr>\n", - " <th>34</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.931528</td>\n", - " <td>9.722512</td>\n", - " <td>31789.523167</td>\n", - " <td>0.9292</td>\n", - " <td>5.931942</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>chi2_cpd</td>\n", - " <td>deepstrom</td>\n", - " <td>0.929741</td>\n", - " <td>9.828513</td>\n", - " <td>34855.966583</td>\n", - " <td>0.9305</td>\n", - " <td>5.963734</td>\n", - " </tr>\n", - " <tr>\n", - " <th>42</th>\n", - " <td>16</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.196694</td>\n", - " <td>9.705651</td>\n", - " <td>34650.985853</td>\n", - " <td>0.1881</td>\n", - " <td>5.946775</td>\n", - " </tr>\n", - " <tr>\n", - " <th>12</th>\n", - " <td>8</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.196694</td>\n", - " <td>9.592059</td>\n", - " <td>33089.771927</td>\n", - " <td>0.1881</td>\n", - " <td>5.880033</td>\n", - " </tr>\n", - " <tr>\n", - " <th>60</th>\n", - " <td>4</td>\n", - " <td>None</td>\n", - " <td>svhn</td>\n", - " <td>linear</td>\n", - " <td>deepstrom</td>\n", - " <td>0.196694</td>\n", - " <td>9.709503</td>\n", - " <td>31571.430093</td>\n", - " <td>0.1881</td>\n", - " <td>5.931994</td>\n", + " <td>0.3478</td>\n", + " <td>1.120015</td>\n", + " <td>15774.281118</td>\n", + " <td>0.3280</td>\n", + " <td>1.689750</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " --nys-size --out-dim dataset kernel network test_acc test_eval_time training_time val_acc val_eval_time\n", - "8 None 128 svhn None dense 0.941009 9.443329 22538.016228 0.9339 5.747079\n", - "32 None 16 svhn None dense 0.940815 9.270262 22534.473243 0.9361 5.683755\n", - "6 None 64 svhn None dense 0.940787 9.433461 22535.162152 0.9350 5.748816\n", - "44 256 None svhn chi2_cpd deepstrom 0.937454 14.281184 83866.884516 0.9326 7.820895\n", - "30 512 None svhn chi2_cpd deepstrom 0.937407 18.118679 137458.785191 0.9312 9.242190\n", - "56 None 1024 svhn None dense 0.937000 10.360103 23155.441453 0.9342 6.369419\n", - "5 512 None svhn linear deepstrom 0.936324 15.367678 133449.591165 0.9303 8.193455\n", - "65 128 None svhn chi2_cpd deepstrom 0.935120 12.290664 57845.390112 0.9309 7.054313\n", - "17 64 None svhn linear deepstrom 0.933824 11.180088 43996.453977 0.9315 6.699816\n", - "19 8 None svhn chi2_cpd deepstrom 0.932556 9.698029 33257.878631 0.9280 5.919757\n", - "15 64 None svhn chi2_cpd deepstrom 0.931815 10.448107 42970.862907 0.9307 6.198442\n", - "48 128 None svhn linear deepstrom 0.931787 11.711458 56833.877055 0.9291 6.837168\n", - "34 4 None svhn chi2_cpd deepstrom 0.931528 9.722512 31789.523167 0.9292 5.931942\n", - "4 16 None svhn chi2_cpd deepstrom 0.929741 9.828513 34855.966583 0.9305 5.963734\n", - "42 16 None svhn linear deepstrom 0.196694 9.705651 34650.985853 0.1881 5.946775\n", - "12 8 None svhn linear deepstrom 0.196694 9.592059 33089.771927 0.1881 5.880033\n", - "60 4 None svhn linear deepstrom 0.196694 9.709503 31571.430093 0.1881 5.931994" + " --batch-size --non-linear --num-epoch --out-dim activation_function dataset network test_acc test_eval_time training_time val_acc val_eval_time\n", + "0 64 False 500 4096 <function relu at 0x7f51de3f6ea0> cifar100 dense 0.0100 1.196356 17166.761853 0.0101 1.775822\n", + "1 64 False 500 16 <function relu at 0x7fe0fa3f5c80> cifar100 dense 0.0100 3.954176 35979.940399 0.0083 6.389008\n", + "2 64 False 500 1024 <function relu at 0x7fab93676ea0> cifar100 dense 0.0100 1.087150 15344.600691 0.0090 1.674889\n", + "3 64 False 500 64 <function relu at 0x7fd5f23f6ea0> cifar100 dense 0.0100 1.264977 15864.949644 0.0083 1.830528\n", + "4 64 False 500 128 <function relu at 0x7f986e8b6ea0> cifar100 dense 0.3478 1.120015 15774.281118 0.3280 1.689750" ] }, - "execution_count": 7, "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_sorted_acc_for_dataset(df, \"svhn\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2018-11-07 09:46:39,143 [16826] DEBUG root: Nystrom possible sizes are: {'4', '512', '8', '256', '128', '64', '16'}\n", - "2018-11-07 09:46:39,145 [16826] DEBUG root: Kernel functions are: {'linear', 'chi2_cpd'}\n", - "2018-11-07 09:46:39,146 [16826] DEBUG root: Compared network types are: {'deepstrom', 'dense'}\n", - "2018-11-07 09:46:39,147 [16826] DEBUG root: Tested representation dimension are: {'1024', '128', '64', '16'}\n" - ] - } - ], - "source": [ - "method_names = set(df[\"network\"].values)\n", - "kernel_names = set(df[\"kernel\"].values)\n", - "kernel_names.remove(\"None\")\n", - "repr_dim = set(df[\"--out-dim\"].values)\n", - "repr_dim.remove(\"None\") # dtype: str\n", - "nys_size = set(df[\"--nys-size\"].values)\n", - "nys_size.remove(\"None\")\n", - "datasets = set(df[\"dataset\"])\n", - "\n", - "logger.debug(\"Nystrom possible sizes are: {}\".format(nys_size))\n", - "logger.debug(\"Kernel functions are: {}\".format(kernel_names))\n", - "logger.debug(\"Compared network types are: {}\".format(method_names))\n", - "logger.debug(\"Tested representation dimension are: {}\".format(repr_dim))" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [], - "source": [ - "nb_classes_datasets = {\n", - " \"svhn\": 10,\n", - " \"cifar10\": 10,\n", - " \"mnist\": 10,\n", - " \"cifar100\": 100\n", - "}\n", - "\n", - "nb_feature_convs = {\n", - " \"svhn\": 512,\n", - " \"cifar10\": 512,\n", - " \"mnist\": 16,\n", - " \"cifar100\": 512\n", - "}\n", - "\n", - "min_acc = 0\n", - "max_acc = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [], - "source": [ - "def post_processing_figures(f, ax, nbparamdeepstrom, subsample_sizes):\n", - " ax.set_ylim(min_acc, max_acc)\n", - " ax.set_ylabel(\"Accuracy\")\n", - " ax.set_xticks([1e4, 1e5, 1e6])\n", - " ax.set_xlabel(\"# Learnable Parameters\")\n", - " ax.legend(bbox_to_anchor=(0.5, -0.20), loc=\"upper center\", ncol=2)\n", - " ax.set_xticklabels([1e4, 1e5, 1e6])\n", - " ax.set_xscale(\"symlog\")\n", - "\n", - " ax_twin = ax.twiny()\n", - " ax_twin.set_xscale(\"symlog\")\n", - " ax_twin.set_xlim(ax.get_xlim())\n", - " ax_twin.set_xticks(sorted(nbparamdeepstrom))\n", - " ax_twin.set_xticklabels(sorted(subsample_sizes))\n", - " ax_twin.set_xlabel(\"Subsample Size\")\n", - " ax.set_title(\"{}\".format(DATANAME), y=1.2)\n", - "\n", - " f.set_size_inches(8, 6)\n", - " f.tight_layout()\n", - " f.subplots_adjust(bottom=0.3)\n", - "\n", - " out_name = \"end_to_end_{}\".format(DATANAME)\n", - "\n", - " base_out_dir = os.path.abspath(__file__.split(\".\")[0])\n", - " base_out_dir_path = pathlib.Path(base_out_dir) / \"images\"\n", - " base_out_dir_path.mkdir(parents=True, exist_ok=True)\n", - " out_path = obase_out_dir_path / out_name\n", - " logger.debug(out_path)\n", - " f.savefig(out_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name '__file__' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m<ipython-input-47-01e3edb84776>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0msorted_idx_dense\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margsort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp_param_dense\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp_param_dense\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_idx_dense\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccuracies_dense\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msorted_idx_dense\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmarker\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"o\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mf\"Dense\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mpost_processing_figures\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp_param\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubsample_sizes_kernel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m<ipython-input-46-99b79cbcf53c>\u001b[0m in \u001b[0;36mpost_processing_figures\u001b[0;34m(f, ax, nbparamdeepstrom, subsample_sizes)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mout_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"end_to_end_{}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDATANAME\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mbase_out_dir\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabspath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m__file__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\".\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0mbase_out_dir_path\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpathlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mPath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase_out_dir\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m\"images\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0mbase_out_dir_path\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmkdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparents\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexist_ok\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name '__file__' is not defined" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 576x432 with 2 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, "output_type": "display_data" } ], "source": [ - "for DATANAME in datasets:\n", - " df_data = df[df[\"dataset\"] == DATANAME]\n", - " nb_classes_dataset = nb_classes_datasets[DATANAME]\n", - " nb_feature_conv = nb_feature_convs[DATANAME]\n", - " f, ax = plt.subplots()\n", - " for k_name in kernel_names:\n", - " df_kernel = df_data[df_data[\"kernel\"] == k_name]\n", - " accuracies_kernel = df_kernel[\"test_acc\"]\n", - " subsample_sizes_kernel = df_kernel[\"--nys-size\"].astype(int)\n", - " np_param = (np.square(subsample_sizes_kernel) + # m x m\n", - " subsample_sizes_kernel * nb_classes_dataset) # m x c\n", - " sorted_idx = np.argsort(np_param.values)\n", - " ax.plot(np_param.values[sorted_idx], accuracies_kernel.values[sorted_idx], marker=\"x\", label=f\"Deepstrom {k_name}\")\n", - " \n", - " df_dense = df_data[df_data[\"network\"] == \"dense\"]\n", - " accuracies_dense = df_dense[\"test_acc\"]\n", - " out_dim_dense = df_dense[\"--out-dim\"].astype(int)\n", - " np_param_dense = (nb_feature_conv * out_dim_dense + # d x D\n", - " out_dim_dense * nb_classes_dataset) # D x c\n", - " sorted_idx_dense = np.argsort(np_param_dense.values)\n", - " ax.plot(np_param_dense.values[sorted_idx_dense], accuracies_dense.values[sorted_idx_dense], marker=\"o\", label=f\"Dense\")\n", - " post_processing_figures(f, ax, np_param, subsample_sizes_kernel)" + "def build_df():\n", + " filepath = os.path.join(DIRNAME_BIG, FILENAME_BIG)\n", + " df = pd.read_csv(filepath)\n", + " df = df.apply(pd.to_numeric, errors=\"ignore\")\n", + " df = df.drop_duplicates()\n", + " col_to_delete = ['--chi-square-PD-kernel', '--chi-square-kernel',\n", + " '--cifar10', '--cifar100', '--exp-chi-square-kernel',\n", + " '--intercept-constant', '--laplacian-kernel', '--linear-kernel',\n", + " '--mnist', '--quiet', '--rbf-kernel',\n", + " '--sigmoid-kernel', '--stacked-kernel', '--sumed-kernel', '--svhn',\n", + " '--tensorboard', '--validation-size',\n", + " 'deepfriedconvnet', 'deepstrom','dense', \"--gamma\", \"--nb-stack\", \"--seed\", \"--non-linearity\",\n", + " \"--train-size\", \"--second-layer-size\",\n", + " \"deepstrom_activation\", \"--real-fastfood\", \"--real-nystrom\", \"kernel\", \"--nys-size\"\n", + " ]\n", + " for c in col_to_delete:\n", + " df = df.drop([c], axis=1)\n", + " return df\n", + "\n", + "DIRNAME_BIG = \"/home/luc/Resultats/Deepstrom/november_2018/classif_end_to_end_with_2_layers_only_dense\"\n", + "FILENAME_BIG = \"gathered_results.csv\"\n", + "df = build_df()\n", + "display(df)" ] }, { diff --git a/main/experiments/parameter_files/november_2018/lazyfile_classif_end_with_2_layers_only_dense.yml b/main/experiments/parameter_files/november_2018/lazyfile_classif_end_with_2_layers_only_dense.yml index dd31625a020019b5e408b9833917d3fd6bf5ba75..54a5719fc96dea4ac27644e0db7abf42e61a0706 100644 --- a/main/experiments/parameter_files/november_2018/lazyfile_classif_end_with_2_layers_only_dense.yml +++ b/main/experiments/parameter_files/november_2018/lazyfile_classif_end_with_2_layers_only_dense.yml @@ -1,6 +1,5 @@ all: dense: - deepstrom: base: epoch_numbers: {"-e": [500]} @@ -13,11 +12,4 @@ base: dense: network: ["dense"] base: - repr_dim: {"-D": [16, 64, 128, 1024]} - -deepstrom: - network: ["deepstrom"] - base: - nys_size: {"-m": [4, 8, 16, 64, 128, 256, 512]} - kernel: ["-C", "-L"] - + repr_dim: {"-D": [16, 64, 128, 1024, 4096]} diff --git a/main/experiments/scripts/november_2018/end_to_end_with_2_layers_only_dense/deepstrom_classif_end_to_end.py b/main/experiments/scripts/november_2018/end_to_end_with_2_layers_only_dense/deepstrom_classif_end_to_end.py index 598fd6b07ff55d43df68569120bb3681d0044d16..60f8e3f602b1a721f35ce56ed409572a2aa2fbf2 100644 --- a/main/experiments/scripts/november_2018/end_to_end_with_2_layers_only_dense/deepstrom_classif_end_to_end.py +++ b/main/experiments/scripts/november_2018/end_to_end_with_2_layers_only_dense/deepstrom_classif_end_to_end.py @@ -59,7 +59,8 @@ import skluc.main.data.mldatasets as dataset import numpy as np import tensorflow as tf from tensorflow.python.keras.layers import Dense -from tensorflow.python.keras.models import Sequential +from tensorflow.python.keras.regularizers import l2 +from tensorflow.python.keras.initializers import he_normal from skluc.main.tensorflow_.kernel_approximation.fastfood_layer import FastFoodLayer from skluc.main.tensorflow_.kernel_approximation.nystrom_layer import DeepstromLayerEndToEnd @@ -113,8 +114,6 @@ class ParameterManagerMain(ParameterManager): self["--gamma"] = GAMMA self.__kernel_dict = {"gamma": np.sqrt(GAMMA)} else: - # GAMMA = self.get_gamma_value(data) - # self["--gamma"] = GAMMA self.__kernel_dict = {} def __getitem__(self, item): @@ -133,6 +132,14 @@ class ResultManagerMain(ResultManager): self["test_acc"] = None self["test_eval_time"] = None + +def cifar100_extended_convmodel_func(input_shape, weight_decay=0.0001): + vgg19_convolution_model = build_vgg19_model(input_shape, weight_decay) + vgg19_convolution_model.add(Dense(4096, use_bias=True, + kernel_regularizer=l2(weight_decay), kernel_initializer=he_normal(), + name='fc_cifar100')) + return vgg19_convolution_model + def main(paraman, resman, printman): if paraman["dataset"] == "mnist": data = dataset.MnistDataset(validation_size=paraman["--validation-size"], seed=paraman["--seed"]) @@ -142,7 +149,7 @@ def main(paraman, resman, printman): convmodel_func = build_vgg19_model elif paraman["dataset"] == "cifar100": data = dataset.Cifar100FineDataset(validation_size=paraman["--validation-size"], seed=paraman["--seed"]) - convmodel_func = build_vgg19_model + convmodel_func = cifar100_extended_convmodel_func elif paraman["dataset"] == "svhn": data = dataset.SVHNDataset(validation_size=paraman["--validation-size"], seed=paraman["--seed"]) convmodel_func = build_vgg19_model @@ -177,6 +184,8 @@ def main(paraman, resman, printman): repr_x = convnet_model(x) repr_sub = convnet_model(subs) + + logger.debug(paraman["kernel_dict"]) input_classifier = None