{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Dataset Loading and testing" ] }, { "cell_type": "code", "execution_count": 483, "metadata": { "ExecuteTime": { "end_time": "2018-09-02T16:42:58.148203Z", "start_time": "2018-09-02T16:42:57.927207Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset has been loaded\n", "x-train (60000, 8)\n", "x-test (40000, 8)\n", "y-train (60000, 256)\n", "y-test (40000, 256)\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import h5py\n", "from sklearn.model_selection import train_test_split\n", "\n", "#now load this dataset \n", "h5f = h5py.File('./datasets/s8_sio2tio2_v2.h5','r')\n", "X = h5f['sizes'][:]\n", "Y = h5f['spectrum'][:]\n", "\n", "#get the ranges of the loaded data\n", "num_layers = X.shape[1]\n", "num_lpoints = Y.shape[1]\n", "size_max = np.amax(X)\n", "size_min = np.amin(X)\n", "size_av = 0.5*(size_max + size_min)\n", "\n", "#this information is not given in the dataset\n", "lam_min = 300\n", "lam_max = 1200\n", "lams = np.linspace(lam_min, lam_max, num_lpoints)\n", "\n", "#create a train - test split of the dataset\n", "x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.4, random_state=42)\n", "\n", "# normalize inputs \n", "x_train = (x_train - 50)/20 \n", "x_test = (x_test - 50)/20 \n", "\n", "print(\"Dataset has been loaded\")\n", "print(\"x-train\", x_train.shape)\n", "print(\"x-test \", x_test.shape)\n", "print(\"y-train\", y_train.shape)\n", "print(\"y-test \", y_test.shape)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model Development" ] }, { "cell_type": "code", "execution_count": 477, "metadata": { "ExecuteTime": { "end_time": "2018-09-02T15:51:08.758399Z", "start_time": "2018-09-02T15:51:08.727870Z" }, "code_folding": [] }, "outputs": [], "source": [ "from keras import backend as K\n", "from keras.models import Sequential, Model\n", "from keras.layers import Dense, Dropout, Reshape, UpSampling1D, Conv1D, Flatten, Activation\n", "from keras.utils import np_utils, multi_gpu_model\n", "from keras.regularizers import l2\n", "from keras.wrappers.scikit_learn import KerasRegressor\n", "from keras.optimizers import Adam\n", "from keras.layers.normalization import BatchNormalization\n", "\n", "\n", "\n", "from sklearn.model_selection import cross_val_score, KFold\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.pipeline import Pipeline\n", "\n", "num_gpus = 2\n", "gpu_list = [\"gpu(%d)\" % i for i in range(num_gpus)]\n", "\n", "\n", "\n", "#define various models here\n", "#naive percentage loss\n", "def size_percent_loss(y_true, y_pred):\n", " y_true_a = 0.5*y_true*(size_max - size_min) + size_av\n", " y_pred_a = 0.5*y_pred*(size_max - size_min) + size_av\n", " y_err = np.abs(y_true_a - y_pred_a)/y_true_a\n", " y_err_f = K.flatten(y_err)\n", " return K.sum(y_err_f)\n", "\n", "#naive percentage loss\n", "def naive_percent_loss(y_true, y_pred):\n", " y_err = np.abs(y_true - y_pred)/y_true\n", " y_err_f = K.flatten(y_err)\n", " return K.sum(y_err_f)\n", "\n", "\n", "#function to test performance on testset \n", "def calc_mre(y_true, y_pred):\n", " y_err = 100*np.abs(y_true - y_pred)/y_true\n", " return np.mean(y_err)\n", "\n", "#function to test performance on testset \n", "def calc_mre_K(y_true, y_pred):\n", " y_err = 100*np.abs(y_true - y_pred)/y_true\n", " return K.mean(y_err)\n", "\n", "\n", "\n", "def naiveploss_mgpu_model():\n", " # create model\n", " model = Sequential()\n", " model = multi_gpu_model(model, gpus=num_gpus)\n", " model.add(Dense(250, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='first' ))\n", " model.add(Dense(250, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='second' ))\n", " model.add(Dense(250, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='third' ))\n", " model.add(Dense(250, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='fourth' ))\n", " model.add(Dense(250, kernel_initializer='normal', name='last'))\n", " # Compile model\n", " model.compile(loss=naive_percent_loss, optimizer='adam', context = gpu_list)\n", " return model\n", "\n", "def naiveploss_model():\n", " # create model\n", " model = Sequential()\n", " model.add(Dense(256, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='first' ))\n", " model.add(Dense(256, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='second' ))\n", " model.add(Dense(256, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='third' ))\n", " model.add(Dense(256, input_dim=x_train.shape[1], kernel_initializer='normal', activation='relu', \n", " name='fourth' ))\n", " model.add(Dense(256, kernel_initializer='normal', name='last'))\n", " # Compile model\n", " model.compile(loss=naive_percent_loss, optimizer='adam', metrics=['accuracy'])\n", " return model\n", "\n", "import timeit\n", "#here we must have a function that calls the training routine n times and then gives avg and stddev \n", "# of the resulting figures\n", "def net_performance(modelfunc, num_trials=3, batch_size=32, num_epochs=200, num_gpus=2):\n", " models = []\n", " train_err = np.ones(num_trials)\n", " test_err = np.ones(num_trials)\n", " val_err = np.ones(num_trials)\n", " train_time = np.ones(num_trials)\n", " for tnum in np.arange(num_trials):\n", " print(\"iteration: \" + str(tnum + 1))\n", " model_curr = modelfunc()\n", " x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.2, random_state=42)\n", " start_time = timeit.default_timer()\n", " history = model_curr.fit(x_t, y_t,\n", " batch_size=batch_size*num_gpus,\n", " epochs=num_epochs, \n", " verbose=1,\n", " validation_data=(x_v, y_v))\n", " train_time[tnum] = timeit.default_timer() - start_time\n", " models.append(model_curr)\n", " train_err[tnum] = (100.0/num_lpoints)*history.history['loss'][-1]/(batch_size*num_gpus)\n", " val_err[tnum] = (100.0/num_lpoints)*history.history['val_loss'][-1]/(batch_size*num_gpus)\n", " test_err[tnum] = calc_mre(y_test, models[tnum].predict(x_test))\n", " return train_err, val_err, test_err, train_time\n", "\n", "#staging area for new models \n", "def plot_training_history(history, factor):\n", " loss, val_loss = history.history['loss'], history.history['val_loss']\n", " loss = np.asarray(loss)/(factor)\n", " val_loss = np.asarray(val_loss)/(factor)\n", " epochs = len(loss)\n", " \n", " fig, axs = plt.subplots(1,1, figsize=(5,5))\n", " axs.semilogy(np.arange(1, epochs + 1), loss, label='train error')\n", " axs.semilogy(np.arange(1, epochs + 1), val_loss, label='validation error')\n", " axs.set_xlabel('Epoch number')\n", " axs.set_ylabel('Mean Relative Error (MRE) (%)')\n", " axs.legend(loc=\"best\")\n", "\n", "\n", "def conv1d_model_bnorm():\n", " \n", " #gpu_list = [\"gpu(%d)\" % i for i in range(num_gpus)]\n", " \n", " # create model\n", " model = Sequential()\n", " \n", " model.add(Dense(256, input_dim=8, kernel_initializer='normal', \n", " name='first' ))\n", " #model.add(BatchNormalization())\n", " model.add(Activation('relu'))\n", " #model.add(Dropout(0.2))\n", " \n", " model.add(Reshape((4, 64)))\n", " model.add(UpSampling1D(size=2))\n", " \n", " model.add(Conv1D(filters=64, kernel_size=3, strides=1, padding='same', \n", " dilation_rate=1, kernel_initializer='normal'))\n", " #model.add(BatchNormalization())\n", " model.add(Activation('relu'))\n", " #model.add(Dropout(0.2))\n", " #model.add(UpSampling1D(size=5))\n", "\n", " model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding='same', \n", " dilation_rate=1, kernel_initializer='normal'))\n", " model.add(Activation('relu'))\n", " #model.add(Dropout(0.3))\n", " \n", "# model.add(Conv1D(filters=64, kernel_size=3, strides=1, padding='same', \n", "# dilation_rate=1, kernel_initializer='normal'))\n", "# model.add(Activation('relu')) \n", "# model.add(Dropout(0.3))\n", "\n", "# model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding='same', \n", "# dilation_rate=1, kernel_initializer='normal'))\n", "# model.add(Activation('relu')) \n", " \n", "# model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding='same', \n", "# dilation_rate=1, kernel_initializer='normal'))\n", "# model.add(Activation('relu')) \n", " \n", "# model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding='same', \n", "# dilation_rate=1, kernel_initializer='normal'))\n", "# model.add(Activation('relu')) \n", " \n", "# model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding='same', \n", "# dilation_rate=1, kernel_initializer='normal'))\n", "# model.add(Activation('relu')) \n", " \n", " model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding='same', \n", " dilation_rate=1, kernel_initializer='normal'))\n", " model.add(Activation('relu')) \n", " \n", " \n", " \n", " model.add(Flatten())\n", " # Compile model\n", "# if num_gpus == 1:\n", " model.compile(loss=naive_percent_loss, optimizer='adam', metrics=[calc_mre_K])\n", "# else:\n", "# model.compile(loss=naive_percent_loss, optimizer='adam', metrics=['accuracy'], context = gpu_list)\n", " \n", " \n", " return model " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model testing" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "start_time": "2018-09-02T16:43:19.079Z" }, "code_folding": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/hegder/anaconda3/envs/deep/lib/python3.6/site-packages/keras/backend/mxnet_backend.py:89: UserWarning: MXNet Backend performs best with `channels_first` format. Using `channels_last` will significantly reduce performance due to the Transpose operations. For performance improvement, please use this API`keras.utils.to_channels_first(x_input)`to transform `channels_last` data to `channels_first` format and also please change the `image_data_format` in `keras.json` to `channels_first`.Note: `x_input` is a Numpy tensor or a list of Numpy tensorRefer to: https://github.com/awslabs/keras-apache-mxnet/tree/master/docs/mxnet_backend/performance_guide.md\n", " train_symbol = func(*args, **kwargs)\n", "/home/hegder/anaconda3/envs/deep/lib/python3.6/site-packages/keras/backend/mxnet_backend.py:92: UserWarning: MXNet Backend performs best with `channels_first` format. Using `channels_last` will significantly reduce performance due to the Transpose operations. For performance improvement, please use this API`keras.utils.to_channels_first(x_input)`to transform `channels_last` data to `channels_first` format and also please change the `image_data_format` in `keras.json` to `channels_first`.Note: `x_input` is a Numpy tensor or a list of Numpy tensorRefer to: https://github.com/awslabs/keras-apache-mxnet/tree/master/docs/mxnet_backend/performance_guide.md\n", " test_symbol = func(*args, **kwargs)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "first (Dense) (None, 256) 2304 \n", "_________________________________________________________________\n", "activation_364 (Activation) (None, 256) 0 \n", "_________________________________________________________________\n", "reshape_101 (Reshape) (None, 4, 64) 0 \n", "_________________________________________________________________\n", "up_sampling1d_133 (UpSamplin (None, 8, 64) 0 \n", "_________________________________________________________________\n", "conv1d_279 (Conv1D) (None, 8, 64) 12352 \n", "_________________________________________________________________\n", "activation_365 (Activation) (None, 8, 64) 0 \n", "_________________________________________________________________\n", "conv1d_280 (Conv1D) (None, 8, 32) 6176 \n", "_________________________________________________________________\n", "activation_366 (Activation) (None, 8, 32) 0 \n", "_________________________________________________________________\n", "conv1d_281 (Conv1D) (None, 8, 32) 3104 \n", "_________________________________________________________________\n", "activation_367 (Activation) (None, 8, 32) 0 \n", "_________________________________________________________________\n", "flatten_98 (Flatten) (None, 256) 0 \n", "=================================================================\n", "Total params: 23,936\n", "Trainable params: 23,936\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "Train on 48000 samples, validate on 12000 samples\n", "Epoch 1/500\n", " 5504/48000 [==>...........................] - ETA: 1s - loss: 6840.5904 - calc_mre_K: 41.7517" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/hegder/anaconda3/envs/deep/lib/python3.6/site-packages/mxnet/module/bucketing_module.py:408: UserWarning: Optimizer created manually outside Module but rescale_grad is not normalized to 1.0/batch_size/num_workers (1.0 vs. 0.015625). Is this intended?\n", " force_init=force_init)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "48000/48000 [==============================] - 2s 45us/step - loss: 2323.6912 - calc_mre_K: 14.1827 - val_loss: 896.4662 - val_calc_mre_K: 5.4789\n", "Epoch 2/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 742.7378 - calc_mre_K: 4.5333 - val_loss: 579.9123 - val_calc_mre_K: 3.5441\n", "Epoch 3/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 509.3823 - calc_mre_K: 3.1090 - val_loss: 444.2056 - val_calc_mre_K: 2.7147\n", "Epoch 4/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 418.0988 - calc_mre_K: 2.5519 - val_loss: 407.5913 - val_calc_mre_K: 2.4910\n", "Epoch 5/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 387.3467 - calc_mre_K: 2.3642 - val_loss: 376.1371 - val_calc_mre_K: 2.2988\n", "Epoch 6/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 370.4068 - calc_mre_K: 2.2608 - val_loss: 350.7615 - val_calc_mre_K: 2.1437\n", "Epoch 7/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 354.7498 - calc_mre_K: 2.1652 - val_loss: 349.3173 - val_calc_mre_K: 2.1349\n", "Epoch 8/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 346.6907 - calc_mre_K: 2.1160 - val_loss: 335.7133 - val_calc_mre_K: 2.0517\n", "Epoch 9/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 337.9433 - calc_mre_K: 2.0626 - val_loss: 331.2980 - val_calc_mre_K: 2.0247\n", "Epoch 10/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 327.4051 - calc_mre_K: 1.9983 - val_loss: 347.9555 - val_calc_mre_K: 2.1266\n", "Epoch 11/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 320.4741 - calc_mre_K: 1.9560 - val_loss: 313.9230 - val_calc_mre_K: 1.9186\n", "Epoch 12/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 309.7732 - calc_mre_K: 1.8907 - val_loss: 295.4653 - val_calc_mre_K: 1.8058\n", "Epoch 13/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 316.2218 - calc_mre_K: 1.9301 - val_loss: 302.6300 - val_calc_mre_K: 1.8496\n", "Epoch 14/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 295.2941 - calc_mre_K: 1.8023 - val_loss: 301.3547 - val_calc_mre_K: 1.8418\n", "Epoch 15/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 294.5014 - calc_mre_K: 1.7975 - val_loss: 290.9876 - val_calc_mre_K: 1.7784\n", "Epoch 16/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 284.6178 - calc_mre_K: 1.7372 - val_loss: 286.1334 - val_calc_mre_K: 1.7487\n", "Epoch 17/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 282.1870 - calc_mre_K: 1.7223 - val_loss: 274.7313 - val_calc_mre_K: 1.6790\n", "Epoch 18/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 275.6412 - calc_mre_K: 1.6824 - val_loss: 287.5898 - val_calc_mre_K: 1.7576\n", "Epoch 19/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 280.7681 - calc_mre_K: 1.7137 - val_loss: 267.7653 - val_calc_mre_K: 1.6365\n", "Epoch 20/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 272.8317 - calc_mre_K: 1.6652 - val_loss: 275.6492 - val_calc_mre_K: 1.6847\n", "Epoch 21/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 264.2744 - calc_mre_K: 1.6130 - val_loss: 249.9930 - val_calc_mre_K: 1.5279\n", "Epoch 22/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 268.0399 - calc_mre_K: 1.6360 - val_loss: 297.7011 - val_calc_mre_K: 1.8194\n", "Epoch 23/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 257.6779 - calc_mre_K: 1.5727 - val_loss: 241.9277 - val_calc_mre_K: 1.4785\n", "Epoch 24/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 261.5118 - calc_mre_K: 1.5961 - val_loss: 245.7443 - val_calc_mre_K: 1.5019\n", "Epoch 25/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 254.5958 - calc_mre_K: 1.5539 - val_loss: 259.7059 - val_calc_mre_K: 1.5873\n", "Epoch 26/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 260.5964 - calc_mre_K: 1.5906 - val_loss: 244.1909 - val_calc_mre_K: 1.4923\n", "Epoch 27/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 250.2888 - calc_mre_K: 1.5276 - val_loss: 239.1960 - val_calc_mre_K: 1.4619\n", "Epoch 28/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 251.2195 - calc_mre_K: 1.5333 - val_loss: 228.8940 - val_calc_mre_K: 1.3989\n", "Epoch 29/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 243.8772 - calc_mre_K: 1.4885 - val_loss: 233.4065 - val_calc_mre_K: 1.4265\n", "Epoch 30/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 246.3612 - calc_mre_K: 1.5037 - val_loss: 244.9270 - val_calc_mre_K: 1.4969\n", "Epoch 31/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 248.7034 - calc_mre_K: 1.5180 - val_loss: 310.1114 - val_calc_mre_K: 1.8954\n", "Epoch 32/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 242.2313 - calc_mre_K: 1.4785 - val_loss: 230.0032 - val_calc_mre_K: 1.4057\n", "Epoch 33/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 247.7315 - calc_mre_K: 1.5120 - val_loss: 225.3025 - val_calc_mre_K: 1.3770\n", "Epoch 34/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 238.1030 - calc_mre_K: 1.4533 - val_loss: 224.8728 - val_calc_mre_K: 1.3744\n", "Epoch 35/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 243.7370 - calc_mre_K: 1.4877 - val_loss: 244.2647 - val_calc_mre_K: 1.4928\n", "Epoch 36/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 232.1748 - calc_mre_K: 1.4171 - val_loss: 222.5892 - val_calc_mre_K: 1.3603\n", "Epoch 37/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 235.6443 - calc_mre_K: 1.4383 - val_loss: 220.9842 - val_calc_mre_K: 1.3506\n", "Epoch 38/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 233.7181 - calc_mre_K: 1.4265 - val_loss: 315.8920 - val_calc_mre_K: 1.9307\n", "Epoch 39/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 242.2111 - calc_mre_K: 1.4783 - val_loss: 217.4203 - val_calc_mre_K: 1.3288\n", "Epoch 40/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 224.9901 - calc_mre_K: 1.3732 - val_loss: 220.2847 - val_calc_mre_K: 1.3463\n", "Epoch 41/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 224.3419 - calc_mre_K: 1.3693 - val_loss: 235.5770 - val_calc_mre_K: 1.4398\n", "Epoch 42/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 225.9222 - calc_mre_K: 1.3789 - val_loss: 262.2176 - val_calc_mre_K: 1.6026\n", "Epoch 43/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 222.6116 - calc_mre_K: 1.3587 - val_loss: 238.2982 - val_calc_mre_K: 1.4564\n", "Epoch 44/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 228.3219 - calc_mre_K: 1.3936 - val_loss: 209.1921 - val_calc_mre_K: 1.2785\n", "Epoch 45/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 219.0174 - calc_mre_K: 1.3368 - val_loss: 208.7272 - val_calc_mre_K: 1.2757\n", "Epoch 46/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 219.8717 - calc_mre_K: 1.3420 - val_loss: 243.5506 - val_calc_mre_K: 1.4885\n", "Epoch 47/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 215.4450 - calc_mre_K: 1.3150 - val_loss: 221.1652 - val_calc_mre_K: 1.3517\n", "Epoch 48/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 229.0667 - calc_mre_K: 1.3981 - val_loss: 201.5087 - val_calc_mre_K: 1.2316\n", "Epoch 49/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 216.3886 - calc_mre_K: 1.3207 - val_loss: 304.1179 - val_calc_mre_K: 1.8586\n", "Epoch 50/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 217.3486 - calc_mre_K: 1.3266 - val_loss: 283.0646 - val_calc_mre_K: 1.7300\n", "Epoch 51/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 220.4536 - calc_mre_K: 1.3455 - val_loss: 205.3306 - val_calc_mre_K: 1.2549\n", "Epoch 52/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 211.3105 - calc_mre_K: 1.2897 - val_loss: 203.3728 - val_calc_mre_K: 1.2429\n", "Epoch 53/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "48000/48000 [==============================] - 2s 42us/step - loss: 216.5780 - calc_mre_K: 1.3219 - val_loss: 218.1752 - val_calc_mre_K: 1.3334\n", "Epoch 54/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 210.8565 - calc_mre_K: 1.2870 - val_loss: 250.5887 - val_calc_mre_K: 1.5315\n", "Epoch 55/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 209.3812 - calc_mre_K: 1.2780 - val_loss: 257.2145 - val_calc_mre_K: 1.5721\n", "Epoch 56/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 212.8660 - calc_mre_K: 1.2992 - val_loss: 193.8064 - val_calc_mre_K: 1.1845\n", "Epoch 57/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 207.9597 - calc_mre_K: 1.2693 - val_loss: 200.2478 - val_calc_mre_K: 1.2238\n", "Epoch 58/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 208.2500 - calc_mre_K: 1.2711 - val_loss: 195.3068 - val_calc_mre_K: 1.1937\n", "Epoch 59/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 203.0600 - calc_mre_K: 1.2394 - val_loss: 208.0723 - val_calc_mre_K: 1.2717\n", "Epoch 60/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 210.2653 - calc_mre_K: 1.2834 - val_loss: 198.3366 - val_calc_mre_K: 1.2122\n", "Epoch 61/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 203.1945 - calc_mre_K: 1.2402 - val_loss: 236.9340 - val_calc_mre_K: 1.4481\n", "Epoch 62/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 203.4355 - calc_mre_K: 1.2417 - val_loss: 250.8086 - val_calc_mre_K: 1.5329\n", "Epoch 63/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 205.5914 - calc_mre_K: 1.2548 - val_loss: 205.4569 - val_calc_mre_K: 1.2557\n", "Epoch 64/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 198.1806 - calc_mre_K: 1.2096 - val_loss: 200.9173 - val_calc_mre_K: 1.2280\n", "Epoch 65/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 199.4657 - calc_mre_K: 1.2174 - val_loss: 206.7223 - val_calc_mre_K: 1.2634\n", "Epoch 66/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 201.2628 - calc_mre_K: 1.2284 - val_loss: 185.5287 - val_calc_mre_K: 1.1339\n", "Epoch 67/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 199.7455 - calc_mre_K: 1.2192 - val_loss: 186.7192 - val_calc_mre_K: 1.1412\n", "Epoch 68/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 196.2491 - calc_mre_K: 1.1978 - val_loss: 197.0725 - val_calc_mre_K: 1.2044\n", "Epoch 69/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 197.0768 - calc_mre_K: 1.2029 - val_loss: 191.9208 - val_calc_mre_K: 1.1730\n", "Epoch 70/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 204.6344 - calc_mre_K: 1.2490 - val_loss: 221.0580 - val_calc_mre_K: 1.3510\n", "Epoch 71/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 195.3576 - calc_mre_K: 1.1924 - val_loss: 196.2850 - val_calc_mre_K: 1.1997\n", "Epoch 72/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 195.4918 - calc_mre_K: 1.1932 - val_loss: 210.6970 - val_calc_mre_K: 1.2878\n", "Epoch 73/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 198.9921 - calc_mre_K: 1.2146 - val_loss: 180.7571 - val_calc_mre_K: 1.1047\n", "Epoch 74/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 190.5602 - calc_mre_K: 1.1631 - val_loss: 183.8101 - val_calc_mre_K: 1.1234\n", "Epoch 75/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 191.1993 - calc_mre_K: 1.1670 - val_loss: 202.7288 - val_calc_mre_K: 1.2390\n", "Epoch 76/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 188.4114 - calc_mre_K: 1.1500 - val_loss: 180.6960 - val_calc_mre_K: 1.1043\n", "Epoch 77/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 194.9033 - calc_mre_K: 1.1896 - val_loss: 189.0821 - val_calc_mre_K: 1.1556\n", "Epoch 78/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 187.8224 - calc_mre_K: 1.1464 - val_loss: 203.9099 - val_calc_mre_K: 1.2463\n", "Epoch 79/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 192.1686 - calc_mre_K: 1.1729 - val_loss: 190.3006 - val_calc_mre_K: 1.1631\n", "Epoch 80/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 187.1602 - calc_mre_K: 1.1423 - val_loss: 196.3340 - val_calc_mre_K: 1.1999\n", "Epoch 81/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 193.2708 - calc_mre_K: 1.1796 - val_loss: 174.4190 - val_calc_mre_K: 1.0660\n", "Epoch 82/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 188.4978 - calc_mre_K: 1.1505 - val_loss: 175.2453 - val_calc_mre_K: 1.0711\n", "Epoch 83/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 186.7983 - calc_mre_K: 1.1401 - val_loss: 189.1177 - val_calc_mre_K: 1.1558\n", "Epoch 84/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 184.4599 - calc_mre_K: 1.1259 - val_loss: 181.5748 - val_calc_mre_K: 1.1097\n", "Epoch 85/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 186.9414 - calc_mre_K: 1.1410 - val_loss: 176.3202 - val_calc_mre_K: 1.0776\n", "Epoch 86/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 183.0118 - calc_mre_K: 1.1170 - val_loss: 237.1591 - val_calc_mre_K: 1.4494\n", "Epoch 87/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 185.6588 - calc_mre_K: 1.1332 - val_loss: 180.8825 - val_calc_mre_K: 1.1055\n", "Epoch 88/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 183.9618 - calc_mre_K: 1.1228 - val_loss: 180.6105 - val_calc_mre_K: 1.1038\n", "Epoch 89/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 183.3712 - calc_mre_K: 1.1192 - val_loss: 175.4248 - val_calc_mre_K: 1.0721\n", "Epoch 90/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 183.7246 - calc_mre_K: 1.1214 - val_loss: 185.7456 - val_calc_mre_K: 1.1352\n", "Epoch 91/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 178.2505 - calc_mre_K: 1.0880 - val_loss: 180.8327 - val_calc_mre_K: 1.1051\n", "Epoch 92/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 186.0844 - calc_mre_K: 1.1358 - val_loss: 173.9373 - val_calc_mre_K: 1.0630\n", "Epoch 93/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 184.3904 - calc_mre_K: 1.1254 - val_loss: 173.9912 - val_calc_mre_K: 1.0634\n", "Epoch 94/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 177.9883 - calc_mre_K: 1.0864 - val_loss: 193.8929 - val_calc_mre_K: 1.1851\n", "Epoch 95/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 182.8738 - calc_mre_K: 1.1162 - val_loss: 176.9708 - val_calc_mre_K: 1.0816\n", "Epoch 96/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 177.2164 - calc_mre_K: 1.0816 - val_loss: 186.7395 - val_calc_mre_K: 1.1413\n", "Epoch 97/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 179.0707 - calc_mre_K: 1.0930 - val_loss: 177.1347 - val_calc_mre_K: 1.0826\n", "Epoch 98/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 174.8489 - calc_mre_K: 1.0672 - val_loss: 188.9310 - val_calc_mre_K: 1.1547\n", "Epoch 99/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 178.7851 - calc_mre_K: 1.0912 - val_loss: 249.5298 - val_calc_mre_K: 1.5250\n", "Epoch 100/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 176.0512 - calc_mre_K: 1.0745 - val_loss: 169.5598 - val_calc_mre_K: 1.0363\n", "Epoch 101/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 181.5873 - calc_mre_K: 1.1083 - val_loss: 188.2017 - val_calc_mre_K: 1.1502\n", "Epoch 102/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 177.6943 - calc_mre_K: 1.0846 - val_loss: 220.0218 - val_calc_mre_K: 1.3447\n", "Epoch 103/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 174.9802 - calc_mre_K: 1.0680 - val_loss: 187.1111 - val_calc_mre_K: 1.1436\n", "Epoch 104/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 171.5180 - calc_mre_K: 1.0469 - val_loss: 169.8878 - val_calc_mre_K: 1.0383\n", "Epoch 105/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "48000/48000 [==============================] - 2s 43us/step - loss: 176.5676 - calc_mre_K: 1.0777 - val_loss: 179.6574 - val_calc_mre_K: 1.0980\n", "Epoch 106/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 172.0308 - calc_mre_K: 1.0500 - val_loss: 173.6216 - val_calc_mre_K: 1.0611\n", "Epoch 107/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 173.2844 - calc_mre_K: 1.0576 - val_loss: 194.6735 - val_calc_mre_K: 1.1898\n", "Epoch 108/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 171.0071 - calc_mre_K: 1.0437 - val_loss: 161.3094 - val_calc_mre_K: 0.9859\n", "Epoch 109/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 170.7646 - calc_mre_K: 1.0423 - val_loss: 163.2023 - val_calc_mre_K: 0.9975\n", "Epoch 110/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 173.6916 - calc_mre_K: 1.0601 - val_loss: 163.8243 - val_calc_mre_K: 1.0013\n", "Epoch 111/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 173.2896 - calc_mre_K: 1.0577 - val_loss: 166.8632 - val_calc_mre_K: 1.0198\n", "Epoch 112/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 171.9277 - calc_mre_K: 1.0494 - val_loss: 174.5092 - val_calc_mre_K: 1.0666\n", "Epoch 113/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 168.1216 - calc_mre_K: 1.0261 - val_loss: 169.9668 - val_calc_mre_K: 1.0388\n", "Epoch 114/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 167.7504 - calc_mre_K: 1.0239 - val_loss: 167.4321 - val_calc_mre_K: 1.0233\n", "Epoch 115/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 170.9459 - calc_mre_K: 1.0434 - val_loss: 166.5023 - val_calc_mre_K: 1.0176\n", "Epoch 116/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 168.1851 - calc_mre_K: 1.0265 - val_loss: 171.9118 - val_calc_mre_K: 1.0507\n", "Epoch 117/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 169.5150 - calc_mre_K: 1.0346 - val_loss: 173.1132 - val_calc_mre_K: 1.0580\n", "Epoch 118/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 167.4551 - calc_mre_K: 1.0221 - val_loss: 159.0827 - val_calc_mre_K: 0.9723\n", "Epoch 119/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 169.3545 - calc_mre_K: 1.0337 - val_loss: 172.1336 - val_calc_mre_K: 1.0520\n", "Epoch 120/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 167.8895 - calc_mre_K: 1.0247 - val_loss: 172.1555 - val_calc_mre_K: 1.0522\n", "Epoch 121/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 165.0078 - calc_mre_K: 1.0071 - val_loss: 160.3470 - val_calc_mre_K: 0.9800\n", "Epoch 122/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 168.4535 - calc_mre_K: 1.0282 - val_loss: 182.1004 - val_calc_mre_K: 1.1129\n", "Epoch 123/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 166.7506 - calc_mre_K: 1.0178 - val_loss: 192.1266 - val_calc_mre_K: 1.1742\n", "Epoch 124/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 165.0920 - calc_mre_K: 1.0076 - val_loss: 171.9095 - val_calc_mre_K: 1.0507\n", "Epoch 125/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 167.0841 - calc_mre_K: 1.0198 - val_loss: 162.8099 - val_calc_mre_K: 0.9950\n", "Epoch 126/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 169.7921 - calc_mre_K: 1.0363 - val_loss: 167.6341 - val_calc_mre_K: 1.0245\n", "Epoch 127/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 166.9801 - calc_mre_K: 1.0192 - val_loss: 173.4421 - val_calc_mre_K: 1.0600\n", "Epoch 128/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 164.9557 - calc_mre_K: 1.0068 - val_loss: 162.8060 - val_calc_mre_K: 0.9950\n", "Epoch 129/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 167.9805 - calc_mre_K: 1.0253 - val_loss: 162.5293 - val_calc_mre_K: 0.9933\n", "Epoch 130/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 160.8372 - calc_mre_K: 0.9817 - val_loss: 159.7647 - val_calc_mre_K: 0.9764\n", "Epoch 131/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 168.1582 - calc_mre_K: 1.0264 - val_loss: 152.4038 - val_calc_mre_K: 0.9314\n", "Epoch 132/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 162.0406 - calc_mre_K: 0.9890 - val_loss: 158.6010 - val_calc_mre_K: 0.9693\n", "Epoch 133/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 167.3064 - calc_mre_K: 1.0212 - val_loss: 161.4855 - val_calc_mre_K: 0.9870\n", "Epoch 134/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 159.4786 - calc_mre_K: 0.9734 - val_loss: 172.2508 - val_calc_mre_K: 1.0527\n", "Epoch 135/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 165.4715 - calc_mre_K: 1.0100 - val_loss: 158.5507 - val_calc_mre_K: 0.9690\n", "Epoch 136/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 162.6488 - calc_mre_K: 0.9927 - val_loss: 158.3580 - val_calc_mre_K: 0.9678\n", "Epoch 137/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 160.1301 - calc_mre_K: 0.9774 - val_loss: 173.3662 - val_calc_mre_K: 1.0595\n", "Epoch 138/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 163.5562 - calc_mre_K: 0.9983 - val_loss: 152.7018 - val_calc_mre_K: 0.9333\n", "Epoch 139/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 168.2620 - calc_mre_K: 1.0270 - val_loss: 155.6908 - val_calc_mre_K: 0.9515\n", "Epoch 140/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 160.4120 - calc_mre_K: 0.9791 - val_loss: 153.5618 - val_calc_mre_K: 0.9385\n", "Epoch 141/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 161.4225 - calc_mre_K: 0.9852 - val_loss: 161.8603 - val_calc_mre_K: 0.9892\n", "Epoch 142/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 161.8659 - calc_mre_K: 0.9880 - val_loss: 175.6316 - val_calc_mre_K: 1.0734\n", "Epoch 143/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 157.2428 - calc_mre_K: 0.9597 - val_loss: 155.5942 - val_calc_mre_K: 0.9509\n", "Epoch 144/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 164.4599 - calc_mre_K: 1.0038 - val_loss: 173.7853 - val_calc_mre_K: 1.0622\n", "Epoch 145/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 157.9990 - calc_mre_K: 0.9643 - val_loss: 167.8621 - val_calc_mre_K: 1.0259\n", "Epoch 146/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 160.9969 - calc_mre_K: 0.9826 - val_loss: 160.5741 - val_calc_mre_K: 0.9814\n", "Epoch 147/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 160.7617 - calc_mre_K: 0.9812 - val_loss: 150.7455 - val_calc_mre_K: 0.9213\n", "Epoch 148/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 155.5846 - calc_mre_K: 0.9496 - val_loss: 155.8324 - val_calc_mre_K: 0.9524\n", "Epoch 149/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 162.9981 - calc_mre_K: 0.9949 - val_loss: 158.5488 - val_calc_mre_K: 0.9690\n", "Epoch 150/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 156.6792 - calc_mre_K: 0.9563 - val_loss: 160.6831 - val_calc_mre_K: 0.9820\n", "Epoch 151/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 157.8365 - calc_mre_K: 0.9634 - val_loss: 147.9439 - val_calc_mre_K: 0.9042\n", "Epoch 152/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 157.9027 - calc_mre_K: 0.9638 - val_loss: 159.3847 - val_calc_mre_K: 0.9741\n", "Epoch 153/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 157.3025 - calc_mre_K: 0.9601 - val_loss: 149.7558 - val_calc_mre_K: 0.9153\n", "Epoch 154/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 154.9589 - calc_mre_K: 0.9458 - val_loss: 153.6895 - val_calc_mre_K: 0.9393\n", "Epoch 155/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 157.9534 - calc_mre_K: 0.9641 - val_loss: 149.4727 - val_calc_mre_K: 0.9135\n", "Epoch 156/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 157.2879 - calc_mre_K: 0.9600 - val_loss: 174.8165 - val_calc_mre_K: 1.0684\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 157/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 155.3898 - calc_mre_K: 0.9484 - val_loss: 184.5836 - val_calc_mre_K: 1.1281\n", "Epoch 158/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 157.5874 - calc_mre_K: 0.9618 - val_loss: 167.1605 - val_calc_mre_K: 1.0216\n", "Epoch 159/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 155.5386 - calc_mre_K: 0.9493 - val_loss: 152.6168 - val_calc_mre_K: 0.9328\n", "Epoch 160/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 157.0394 - calc_mre_K: 0.9585 - val_loss: 204.3699 - val_calc_mre_K: 1.2490\n", "Epoch 161/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 157.2073 - calc_mre_K: 0.9595 - val_loss: 150.0930 - val_calc_mre_K: 0.9173\n", "Epoch 162/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 154.8789 - calc_mre_K: 0.9453 - val_loss: 154.3105 - val_calc_mre_K: 0.9431\n", "Epoch 163/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 158.2191 - calc_mre_K: 0.9657 - val_loss: 158.0620 - val_calc_mre_K: 0.9660\n", "Epoch 164/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 153.7178 - calc_mre_K: 0.9382 - val_loss: 144.2746 - val_calc_mre_K: 0.8818\n", "Epoch 165/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 158.8185 - calc_mre_K: 0.9694 - val_loss: 147.3947 - val_calc_mre_K: 0.9008\n", "Epoch 166/500\n", "48000/48000 [==============================] - 2s 39us/step - loss: 152.6348 - calc_mre_K: 0.9316 - val_loss: 150.1363 - val_calc_mre_K: 0.9176\n", "Epoch 167/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 157.1805 - calc_mre_K: 0.9594 - val_loss: 175.2181 - val_calc_mre_K: 1.0709\n", "Epoch 168/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 153.8262 - calc_mre_K: 0.9389 - val_loss: 150.1207 - val_calc_mre_K: 0.9175\n", "Epoch 169/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 152.8099 - calc_mre_K: 0.9327 - val_loss: 153.8275 - val_calc_mre_K: 0.9401\n", "Epoch 170/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 152.8493 - calc_mre_K: 0.9329 - val_loss: 152.7625 - val_calc_mre_K: 0.9337\n", "Epoch 171/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 153.4837 - calc_mre_K: 0.9368 - val_loss: 146.0071 - val_calc_mre_K: 0.8923\n", "Epoch 172/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 153.4907 - calc_mre_K: 0.9368 - val_loss: 154.5233 - val_calc_mre_K: 0.9444\n", "Epoch 173/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 157.3652 - calc_mre_K: 0.9605 - val_loss: 192.5803 - val_calc_mre_K: 1.1771\n", "Epoch 174/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 153.3018 - calc_mre_K: 0.9357 - val_loss: 147.3903 - val_calc_mre_K: 0.9008\n", "Epoch 175/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 150.2837 - calc_mre_K: 0.9173 - val_loss: 147.6061 - val_calc_mre_K: 0.9021\n", "Epoch 176/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 151.2750 - calc_mre_K: 0.9233 - val_loss: 156.2852 - val_calc_mre_K: 0.9552\n", "Epoch 177/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 155.4022 - calc_mre_K: 0.9485 - val_loss: 160.6620 - val_calc_mre_K: 0.9819\n", "Epoch 178/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 150.0992 - calc_mre_K: 0.9161 - val_loss: 146.9541 - val_calc_mre_K: 0.8981\n", "Epoch 179/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 151.7801 - calc_mre_K: 0.9264 - val_loss: 145.2126 - val_calc_mre_K: 0.8875\n", "Epoch 180/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 152.5974 - calc_mre_K: 0.9314 - val_loss: 146.6309 - val_calc_mre_K: 0.8962\n", "Epoch 181/500\n", "48000/48000 [==============================] - 2s 43us/step - loss: 151.5653 - calc_mre_K: 0.9251 - val_loss: 151.2395 - val_calc_mre_K: 0.9243\n", "Epoch 182/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 151.7022 - calc_mre_K: 0.9259 - val_loss: 183.5485 - val_calc_mre_K: 1.1218\n", "Epoch 183/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 151.0847 - calc_mre_K: 0.9221 - val_loss: 155.5237 - val_calc_mre_K: 0.9505\n", "Epoch 184/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 152.4844 - calc_mre_K: 0.9307 - val_loss: 146.4525 - val_calc_mre_K: 0.8951\n", "Epoch 185/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 152.0913 - calc_mre_K: 0.9283 - val_loss: 183.2436 - val_calc_mre_K: 1.1199\n", "Epoch 186/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 148.7328 - calc_mre_K: 0.9078 - val_loss: 148.7469 - val_calc_mre_K: 0.9091\n", "Epoch 187/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 151.5078 - calc_mre_K: 0.9247 - val_loss: 147.4075 - val_calc_mre_K: 0.9009\n", "Epoch 188/500\n", "48000/48000 [==============================] - 2s 45us/step - loss: 156.6485 - calc_mre_K: 0.9561 - val_loss: 143.0240 - val_calc_mre_K: 0.8741\n", "Epoch 189/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 147.3341 - calc_mre_K: 0.8993 - val_loss: 145.5133 - val_calc_mre_K: 0.8893\n", "Epoch 190/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 148.8207 - calc_mre_K: 0.9083 - val_loss: 162.6310 - val_calc_mre_K: 0.9939\n", "Epoch 191/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 149.6861 - calc_mre_K: 0.9136 - val_loss: 145.2836 - val_calc_mre_K: 0.8879\n", "Epoch 192/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 149.0215 - calc_mre_K: 0.9096 - val_loss: 163.1700 - val_calc_mre_K: 0.9972\n", "Epoch 193/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 151.2654 - calc_mre_K: 0.9233 - val_loss: 147.9096 - val_calc_mre_K: 0.9040\n", "Epoch 194/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 148.1330 - calc_mre_K: 0.9041 - val_loss: 147.7480 - val_calc_mre_K: 0.9030\n", "Epoch 195/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 148.5565 - calc_mre_K: 0.9067 - val_loss: 141.7590 - val_calc_mre_K: 0.8664\n", "Epoch 196/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 147.5257 - calc_mre_K: 0.9004 - val_loss: 143.9111 - val_calc_mre_K: 0.8795\n", "Epoch 197/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 147.8745 - calc_mre_K: 0.9026 - val_loss: 143.1019 - val_calc_mre_K: 0.8746\n", "Epoch 198/500\n", "48000/48000 [==============================] - 2s 40us/step - loss: 157.2082 - calc_mre_K: 0.9595 - val_loss: 138.7091 - val_calc_mre_K: 0.8478\n", "Epoch 199/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 145.0228 - calc_mre_K: 0.8851 - val_loss: 138.6979 - val_calc_mre_K: 0.8477\n", "Epoch 200/500\n", "48000/48000 [==============================] - 2s 42us/step - loss: 147.6379 - calc_mre_K: 0.9011 - val_loss: 140.1786 - val_calc_mre_K: 0.8567\n", "Epoch 201/500\n", "48000/48000 [==============================] - 2s 41us/step - loss: 147.7350 - calc_mre_K: 0.9017 - val_loss: 140.6768 - val_calc_mre_K: 0.8598\n", "Epoch 202/500\n", "48000/48000 [==============================] - 3s 53us/step - loss: 156.0223 - calc_mre_K: 0.9523 - val_loss: 140.4442 - val_calc_mre_K: 0.8584\n", "Epoch 203/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 148.3388 - calc_mre_K: 0.9054 - val_loss: 144.3343 - val_calc_mre_K: 0.8821\n", "Epoch 204/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 145.2244 - calc_mre_K: 0.8864 - val_loss: 143.3784 - val_calc_mre_K: 0.8763\n", "Epoch 205/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 148.7085 - calc_mre_K: 0.9076 - val_loss: 152.9296 - val_calc_mre_K: 0.9347\n", "Epoch 206/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 145.5858 - calc_mre_K: 0.8886 - val_loss: 143.1560 - val_calc_mre_K: 0.8749\n", "Epoch 207/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 145.2802 - calc_mre_K: 0.8867 - val_loss: 148.3785 - val_calc_mre_K: 0.9068\n", "Epoch 208/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 148.4465 - calc_mre_K: 0.9060 - val_loss: 141.1367 - val_calc_mre_K: 0.8626\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 209/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 146.3837 - calc_mre_K: 0.8935 - val_loss: 142.2346 - val_calc_mre_K: 0.8693\n", "Epoch 210/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 146.4737 - calc_mre_K: 0.8940 - val_loss: 142.9147 - val_calc_mre_K: 0.8735\n", "Epoch 211/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 145.3539 - calc_mre_K: 0.8872 - val_loss: 149.6881 - val_calc_mre_K: 0.9149\n", "Epoch 212/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 148.5170 - calc_mre_K: 0.9065 - val_loss: 150.0849 - val_calc_mre_K: 0.9173\n", "Epoch 213/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 144.6560 - calc_mre_K: 0.8829 - val_loss: 140.1282 - val_calc_mre_K: 0.8564\n", "Epoch 214/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 148.1572 - calc_mre_K: 0.9043 - val_loss: 144.9958 - val_calc_mre_K: 0.8862\n", "Epoch 215/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 146.6644 - calc_mre_K: 0.8952 - val_loss: 146.0564 - val_calc_mre_K: 0.8927\n", "Epoch 216/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 149.6980 - calc_mre_K: 0.9137 - val_loss: 142.0832 - val_calc_mre_K: 0.8684\n", "Epoch 217/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 144.3417 - calc_mre_K: 0.8810 - val_loss: 148.1801 - val_calc_mre_K: 0.9056\n", "Epoch 218/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 146.0351 - calc_mre_K: 0.8913 - val_loss: 140.5495 - val_calc_mre_K: 0.8590\n", "Epoch 219/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 144.6474 - calc_mre_K: 0.8829 - val_loss: 144.5767 - val_calc_mre_K: 0.8836\n", "Epoch 220/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 143.5534 - calc_mre_K: 0.8762 - val_loss: 138.5354 - val_calc_mre_K: 0.8467\n", "Epoch 221/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 150.2085 - calc_mre_K: 0.9168 - val_loss: 135.0006 - val_calc_mre_K: 0.8251\n", "Epoch 222/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 142.4652 - calc_mre_K: 0.8695 - val_loss: 149.9817 - val_calc_mre_K: 0.9167\n", "Epoch 223/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 143.8615 - calc_mre_K: 0.8781 - val_loss: 157.9293 - val_calc_mre_K: 0.9652\n", "Epoch 224/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 146.5398 - calc_mre_K: 0.8944 - val_loss: 140.7570 - val_calc_mre_K: 0.8603\n", "Epoch 225/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 143.3137 - calc_mre_K: 0.8747 - val_loss: 145.9179 - val_calc_mre_K: 0.8918\n", "Epoch 226/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 144.2041 - calc_mre_K: 0.8802 - val_loss: 138.8381 - val_calc_mre_K: 0.8485\n", "Epoch 227/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 143.3443 - calc_mre_K: 0.8749 - val_loss: 142.0669 - val_calc_mre_K: 0.8683\n", "Epoch 228/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 143.7239 - calc_mre_K: 0.8772 - val_loss: 150.9734 - val_calc_mre_K: 0.9227\n", "Epoch 229/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 144.0683 - calc_mre_K: 0.8793 - val_loss: 170.5768 - val_calc_mre_K: 1.0425\n", "Epoch 230/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 149.2998 - calc_mre_K: 0.9113 - val_loss: 137.7094 - val_calc_mre_K: 0.8416\n", "Epoch 231/500\n", "48000/48000 [==============================] - 2s 51us/step - loss: 141.6405 - calc_mre_K: 0.8645 - val_loss: 146.0195 - val_calc_mre_K: 0.8924\n", "Epoch 232/500\n", "48000/48000 [==============================] - 2s 51us/step - loss: 142.1636 - calc_mre_K: 0.8677 - val_loss: 135.8212 - val_calc_mre_K: 0.8301\n", "Epoch 233/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 143.9940 - calc_mre_K: 0.8789 - val_loss: 139.7238 - val_calc_mre_K: 0.8539\n", "Epoch 234/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 143.6764 - calc_mre_K: 0.8769 - val_loss: 141.8826 - val_calc_mre_K: 0.8671\n", "Epoch 235/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 142.9464 - calc_mre_K: 0.8725 - val_loss: 146.1504 - val_calc_mre_K: 0.8932\n", "Epoch 236/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 142.1508 - calc_mre_K: 0.8676 - val_loss: 133.4828 - val_calc_mre_K: 0.8158\n", "Epoch 237/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 143.1424 - calc_mre_K: 0.8737 - val_loss: 136.1025 - val_calc_mre_K: 0.8318\n", "Epoch 238/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 142.3401 - calc_mre_K: 0.8688 - val_loss: 161.8890 - val_calc_mre_K: 0.9895\n", "Epoch 239/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 145.8807 - calc_mre_K: 0.8904 - val_loss: 140.1707 - val_calc_mre_K: 0.8567\n", "Epoch 240/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 142.3861 - calc_mre_K: 0.8691 - val_loss: 139.5764 - val_calc_mre_K: 0.8531\n", "Epoch 241/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 140.6931 - calc_mre_K: 0.8587 - val_loss: 154.3820 - val_calc_mre_K: 0.9436\n", "Epoch 242/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 141.0809 - calc_mre_K: 0.8611 - val_loss: 137.8522 - val_calc_mre_K: 0.8425\n", "Epoch 243/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 142.9318 - calc_mre_K: 0.8724 - val_loss: 139.0759 - val_calc_mre_K: 0.8500\n", "Epoch 244/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 142.3913 - calc_mre_K: 0.8691 - val_loss: 145.3933 - val_calc_mre_K: 0.8886\n", "Epoch 245/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 143.0630 - calc_mre_K: 0.8732 - val_loss: 155.2948 - val_calc_mre_K: 0.9491\n", "Epoch 246/500\n", "48000/48000 [==============================] - 2s 51us/step - loss: 141.7170 - calc_mre_K: 0.8650 - val_loss: 157.5077 - val_calc_mre_K: 0.9626\n", "Epoch 247/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 141.3705 - calc_mre_K: 0.8629 - val_loss: 138.1073 - val_calc_mre_K: 0.8441\n", "Epoch 248/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 140.5445 - calc_mre_K: 0.8578 - val_loss: 138.3037 - val_calc_mre_K: 0.8453\n", "Epoch 249/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 142.7347 - calc_mre_K: 0.8712 - val_loss: 140.8826 - val_calc_mre_K: 0.8611\n", "Epoch 250/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 140.7182 - calc_mre_K: 0.8589 - val_loss: 141.9655 - val_calc_mre_K: 0.8677\n", "Epoch 251/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 140.9568 - calc_mre_K: 0.8603 - val_loss: 144.2094 - val_calc_mre_K: 0.8814\n", "Epoch 252/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 140.6239 - calc_mre_K: 0.8583 - val_loss: 145.6936 - val_calc_mre_K: 0.8904\n", "Epoch 253/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 141.5078 - calc_mre_K: 0.8637 - val_loss: 141.7785 - val_calc_mre_K: 0.8665\n", "Epoch 254/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 141.6125 - calc_mre_K: 0.8643 - val_loss: 150.7039 - val_calc_mre_K: 0.9211\n", "Epoch 255/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 140.8464 - calc_mre_K: 0.8597 - val_loss: 136.7063 - val_calc_mre_K: 0.8355\n", "Epoch 256/500\n", "48000/48000 [==============================] - 2s 46us/step - loss: 146.8891 - calc_mre_K: 0.8965 - val_loss: 136.1380 - val_calc_mre_K: 0.8320\n", "Epoch 257/500\n", "48000/48000 [==============================] - 2s 47us/step - loss: 140.7220 - calc_mre_K: 0.8589 - val_loss: 144.9428 - val_calc_mre_K: 0.8858\n", "Epoch 258/500\n", "48000/48000 [==============================] - 2s 44us/step - loss: 139.1680 - calc_mre_K: 0.8494 - val_loss: 132.6805 - val_calc_mre_K: 0.8109\n", "Epoch 259/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 140.0768 - calc_mre_K: 0.8550 - val_loss: 136.1024 - val_calc_mre_K: 0.8319\n", "Epoch 260/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 140.5873 - calc_mre_K: 0.8581 - val_loss: 145.0039 - val_calc_mre_K: 0.8862\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 261/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 141.3701 - calc_mre_K: 0.8629 - val_loss: 144.6493 - val_calc_mre_K: 0.8841\n", "Epoch 262/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 139.7921 - calc_mre_K: 0.8532 - val_loss: 132.5857 - val_calc_mre_K: 0.8103\n", "Epoch 263/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 141.5622 - calc_mre_K: 0.8640 - val_loss: 136.2479 - val_calc_mre_K: 0.8327\n", "Epoch 264/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 137.8996 - calc_mre_K: 0.8417 - val_loss: 134.3789 - val_calc_mre_K: 0.8213\n", "Epoch 265/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 140.5640 - calc_mre_K: 0.8579 - val_loss: 140.5279 - val_calc_mre_K: 0.8589\n", "Epoch 266/500\n", "48000/48000 [==============================] - 2s 49us/step - loss: 138.8792 - calc_mre_K: 0.8477 - val_loss: 146.6169 - val_calc_mre_K: 0.8961\n", "Epoch 267/500\n", "48000/48000 [==============================] - 2s 48us/step - loss: 139.4853 - calc_mre_K: 0.8514 - val_loss: 166.6822 - val_calc_mre_K: 1.0187\n", "Epoch 268/500\n", "48000/48000 [==============================] - 2s 50us/step - loss: 140.4757 - calc_mre_K: 0.8574 - val_loss: 140.2903 - val_calc_mre_K: 0.8574\n", "Epoch 269/500\n", "36864/48000 [======================>.......] - ETA: 0s - loss: 139.0644 - calc_mre_K: 0.8488" ] } ], "source": [ "\n", "model = conv1d_model_bnorm()\n", "#model = conv1d_model(1)\n", "\n", "#model = naiveploss_model()\n", "model.summary()\n", "\n", " \n", "# from IPython.display import SVG\n", "# from keras.utils.vis_utils import model_to_dot\n", "\n", "# #SVG(model_to_dot(model).create(prog='dot', format='svg'))\n", " \n", " \n", "x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.2, random_state=42)\n", "# model = naiveploss_mgpu_model()\n", "# model.summary() \n", "history = model.fit(x_t, y_t,\n", " batch_size=64,\n", " epochs=500, \n", " verbose=1,\n", " validation_data=(x_v, y_v))\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y_pred = model.predict(x_test)\n", "print(calc_mre(y_test, y_pred))\n", "\n" ] }, { "cell_type": "code", "execution_count": 482, "metadata": { "ExecuteTime": { "end_time": "2018-09-02T16:42:10.624208Z", "start_time": "2018-09-02T16:42:08.257293Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.212953421799862\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y_pred = model.predict(x_test)\n", "print(calc_mre(y_test, y_pred))\n", "history60 = history\n", "plot_training_history(history, 64*2.56)" ] }, { "cell_type": "code", "execution_count": 410, "metadata": { "ExecuteTime": { "end_time": "2018-09-02T09:51:39.993846Z", "start_time": "2018-09-02T09:51:39.779846Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[52 49 44 70 50 48 33 60]\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 410, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABXoAAAFNCAYAAAC+BtcHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd4lFX6xvHvmZn0hEA6hBoggQQIvQmoIAqKoIi9N6w/dXexu+u69rKuFbvu2gtiA0UURVCkhV5C6D0hhJKE1Jk5vz8SQlBKgCRDwv25Li7nPe8759wTNSTPnHleY61FREREREREREREROouh68DiIiIiIiIiIiIiMixUaFXREREREREREREpI5ToVdERERERERERESkjlOhV0RERERERERERKSOU6FXREREREREREREpI5ToVdERERERERERESkjlOhV0RERKQKjDH3GWPeLH/c0hhjjTGu8uPvjDFX+jZh7TDGrDPGnFYD8041xlx3kHP7fb1FREREROTP9MOyiIiISBVYax87xLmhtZnlaBljTgHet9Y29XUWERERERGpXtrRKyIiIiIiIiIiIlLHqdArIiIiUokx5m5jzGZjTJ4xZoUxZlD5+D+NMe8f5Dn7tR0wxlxvjFlePscyY0zX8vF7jDGrK42fe4gczvJ2EXuvTzPGNCs/19cYM8cYs7v8n30rPe/qSmuvMcbcUD4eAnwHNDHG5Jf/aWKMcVTKlWOM+dQYE1FpvsuNMevLz91/mK9dpDHmG2NMbnmuR4wxv1Y6f9DcB3jtzxhjthtj1gBnHWpdERERERFRoVdERESkgjEmCbgV6GGtDQPOANYd4RznA/8ErgAaAMOBnPLTq4H+QDjwEPC+MabxQab6K3AxcGb5PNcABeVF2InAC0Ak8Cww0RgTWf68bcCw8udcDfzHGNPVWrsHGApssdaGlv/ZAtwGnAOcDDQBdgIvl7+WZOAV4PLyc5HAodo+vAzsAeKAK8v/7P26HC53ZdeXv4YuQHdg1CHWFBERERERVOgVERERqcwDBADJxhg/a+06a+3qI5zjOuApa+0cW2aVtXY9gLX2M2vtFmut11r7CbAS6HmIeR6w1q4on2ehtTaHst2tK62171lr3dbaj4B04OzyNSZaa1eXP+cXYDJlxeWDuQG431q7yVpbTFmRelT5jc9GAROstdPKz/0d8B5oEmOMEzgPeNBaW2CtXQb8r9Ilh8z9BxcAz1lrN1prdwCPHyK/iIiIiIigQq+IiIhIBWvtKuAOyoqd24wxHxtjmhzhNM0o27n7J8aYK4wxC4wxu4wxu4AOQNQRztMEWP+HsfVAfPkaQ40xM40xO8rXOPMQawC0AL6olGk5ZQXv2PK1Nu69sHxXcM4BZ4Foym70u7HSWOXHh8z9B/ute4DniYiIiIjIH6jQKyIiIlKJtfZDa20/ygqgFnjyCKfYCLT+46AxpgXwBmWtISKttQ2BJYA5knmALeXZKmsObDbGBACfA88AseVrfFtpDXuQdYZaaxtW+hNord0MbKWs4Lz3NQRT1nbhQLIBN/u3dmhW6fFBcx9grv3WLb9OREREREQOQYVeERERkXLGmCRjzMDygmkRUEjZ7tYj8SYwxhjTzZRpU17kDaGs0JpdvtbVlO3oPdQ8Dxtj2pbP06m8n+23QKIx5hJjjMsYcyGQDEwA/ClrPZENuI0xQ4HTK82ZBUQaY8Irjb0KPFqeEWNMtDFmRPm5ccAwY0w/Y4w/8C8O8vOjtdYDjAf+aYwJNsa0o6xP8V6Hyv1HnwK3GWOaGmMaAfcc4uskIiIiIiKo0CsiIiJSWQDwBLAdyARigPuOZAJr7WfAo8CHQB7wJRBR3rP238DvlBVcOwK/HWKqZykreE4GcoG3gKDyPr3DgL9R1kbhLmCYtXa7tTaPspurfUrZTdUuAb6ulC0d+AhYU96qoQnwfPk1k40xecBMoFf59UuBW8pfy9byOTcdIvOtlN1oLhN4r3yt4vK5Dpr7APO8AXwPLATmUVZAFhERERGRQzDWHugTfCIiIiIix8YY8yQQZ6290tdZRERERETqO+3oFREREZFqYYxpV95iwhhjegLXAl/4OpeIiIiIyInA5esAIiIiIlJvhFHWrqEJsI2yVhVf+TSRiIiIiMgJQq0bREREREREREREROo4tW4QERERERERERERqeNU6BURERERERERERGp42qkR29UVJRt2bJlTUwtIiIiIiIiIiJSp6SlpW231kb7OkdtS0tLi3G5XG8CHdCG02PlBZa43e7runXrtu1AF9RIobdly5bMnTu3JqYWERERERERERGpU4wx632dwRdcLtebcXFx7aOjo3c6HA7dKOwYeL1ek52dnZyZmfkmMPxA11Spkm6MaWiMGWeMSTfGLDfG9KnWpCIiIiIiIiIiIlLfdIiOjs5VkffYORwOGx0dvZuy3dEHVNUdvc8Dk6y1o4wx/kBwdQQUERERERERERGResuhIm/1Kf9aHnTj7mF39BpjGgADgLcArLUl1tpd1ZZQREREREREREREpBZceOGFLdLS0gKrY674+PiOW7duPeRG2nvuuSfuSOd94YUXIq+44ormR/q8qrRuSACygXeMMfONMW8aY0KOdCERERERERERERERX/rkk0/Wd+vWrai21nvhhRca19ZaVSn0uoCuwCvW2i7AHuCeP15kjBltjJlrjJmbnZ1dzTFFREREREREREREqi43N9dxyimntElKSkpu27ZtyhtvvNGoZ8+eSdOmTQsGCA4O7nLTTTfFp6SktO/bt2/izz//HNyzZ8+kpk2bdvzggw/C4c+7a0899dQ2EyZMCPvjWqeddlrrlJSU9m3atEl55plnogBuvvnm+OLiYke7du2Shw8f3gpg7NixER07dmzfrl275EsuuaSF2+0G4Pnnn49s2bJlhx49eiTNmDEj9Gheb1UKvZuATdbaWeXH4ygr/O7HWvu6tba7tbZ7dHT00WQRERERERERERERqRbjx49vEBcXV7pixYplK1euXDpy5MjcyucLCwsdp556at7SpUuXh4SEeB544IH46dOnZ3z22WerHn744fgjWeuDDz5Yt3Tp0uULFixY9tprr8VmZmY6x44duzkgIMCbnp6+7Ouvv147b968wHHjxkXMnTs3PT09fZnD4bCvvvpq5Pr16/2eeOKJJjNmzEifPn16RkZGRtDRvN7D3ozNWptpjNlojEmy1q4ABgHLjmYxEREREREREREROfG0vGdit5qae90TZ6UdaLxr166F999/f7ObbropfsSIEbuHDBmSX/m8n5+fHTVqVC5ASkpKYUBAgDcgIMD27NmzcPPmzf5HkuHJJ5+MnThxYkOAzMxMv6VLlwbGxcXtqXzNpEmTwpYsWRKcmpraHqCoqMgRExPjnjZtWkjv3r3zmjRp4gYYOXLkjoyMjCPuI3zYQm+5/wM+MMb4A2uAq490IREREREREREREZHa0qlTp+J58+Yt+/zzz8Pvv//++B9//HG/Hb0ul8s6HGUNDxwOBwEBARbA6XTi8XjM3mu8Xm/Fc4qLi//UIWHChAlhv/zyS9jcuXPTw8LCvD179kwqLCz803XWWnP++efnvPzyy5srj7/33nsNjTHH/Hqr0roBa+2C8rYMnay151hrdx7zyiIiIlJtduwpISu3iFKP9/AXi4iIiIiInADWrVvnFxYW5r355pt33HHHHVkLFiwIPtI5WrduXbJ06dJgj8fDqlWr/BYtWhTyx2t27drlDA8P94SFhXnnz58fuHDhwoprXC6XLS4uNgBDhgzJnTBhQqPNmze7ALKyspwZGRn+AwYM2DNz5sywzMxMZ3Fxsfniiy8aHc3rreqOXhERETmO5Be7mbUmh19Xbee3VdvJysokwuQRTDHRgW5iAz2Eh4XRsc9ghnZqjstZpfd2RUREREREasTB2ivUpLS0tKB77723qcPhwOVy2bFjx64fM2ZMsyOZY/Dgwfkvv/xycVJSUkpSUlJhcnJywR+vOe+883a//vrr0YmJicmtW7cuSk1NrWjZcOmll2a3b98+uUOHDgVff/312gceeGDzoEGDEr1eL35+fvaFF17YMGjQoD133333lt69e7ePjo4u7dSpU8HeHcVHwlhrj/Q5h9W9e3c7d+7cap9XRETkRLdlVyEvTFrArsWTaW/WkmzWk+JYRxOz44DX3196Db82HM7oAQmc17UpgX7OWk4sIiIiIiLGmDRrbXdf56htCxcuXJeamrrd1znqk4ULF0alpqa2PNA57egVERGpA/YUu3ntl9X8Pn0yYx1PEe2Xe9jnFFs/vvH0JjengPu/WMLzP67kjtMSubhnM6qj/5OIiIiIiIgcP1ToFREROY5Za/l83maenJROdl4xITTGBBzgOmcAJjwe6xeM2xlICQGk2+aYzEZQWArAtrxi/v7FAgpXTOHKS69UOwcREREREZF6RIVeERGR41RhiYd7xy/iywVbKsb2EMT4kAu5kgkEpJ4HcZ2gcSdMZFtwujCAX/mfbsBvxW4+nr2BN6avITu3kH/7vcI5a2bw9ktrGXXD32kQ6OejVyciIiIiIiLVSYVeERGR49CG7Xv45q1/0Tx3OzASgNgGAdx5RjtGdjoNB4+AX+Bh5wkNcHFd/wQu692Cn177G2dunwHANTuf54Xnijl39IM0izjiG8+KiIiIiIjIcUaFXhERkePM9EUZlI6/mVuYg9dlmGOTaN51CA8OTybY/+j+6g70czL0mgfJHDuLuPxlANxW9CpPvlTKyBseom1sWHW+BBEREREREallas4nIiJyHPnq229J+HwIA5kDgMNY/h3/C0+O6nTURd69THAj4m75jh0NO1aM3e19i8/eepKc/OJjmltERERERER8S4VeERGR44C1lncm/MxJs24g3uRUjG9Lvoomoz+vvoWCGhJx40Tyo7tUDI0pHsvzb/+XYren+tYRERERERGpZ4KDg7sArFu3zm/IkCEJh7r2X//6V0xeXt4R1V4nTJgQduqpp7Y52nwq9IqIiPiYtZb/fDOLAbNvIsrkApBvQsk953/EXPB8lXrxHpHAcEKv/Zq88CQA/I2Hv+T8i2c/noS1tnrXEhEREREROY653e4jfk7Lli1LJ02atOZQ17z22mux+fn5tVp7VaFXRETEh7xey4Pj0zhp7u20dmwFoAQ/XJd9SoPO59TcwoENCLt6HAX+kQA0MvlckPE33pmyoObWFBERERERqUUrVqzwb9WqVcrIkSNbJiYmJg8ZMiQhLy/PER8f33HMmDGNu3XrlvT22283Wrp0aUD//v3bpqSktO/WrVvS/PnzAwHS09P9O3fu3K5Dhw7tb7/99iaV523btm0KlBWKR48e3TQxMTE5MTEx+dFHH4155JFHYrZt2+Z38sknJ/bq1SsRYPz48Q06d+7cLjk5uf3QoUMTdu/e7QAYN25cg1atWqV069Ytady4cQ2P5fWq0CsiIuIjXq/lzk/n033BA/RypFeMm5GvEdj6pJoP0LA5QZd/QqnxB6C1Yyvxv4xh8tLMml9bRERERESkFqxbty7wxhtvzM7IyFgWFhbmffrpp6MBAgMDvWlpaStGjx6987rrrmsxduzYDUuXLl3+9NNPb7rpppuaA9x8883Nr7vuuuwlS5Ysj4uLKz3Q/P/+97+j169fH7B06dJlGRkZy6677rqcBx54YFtMTEzpL7/8kjFr1qyMrVu3uh577LHG06ZNy1i2bNnyrl27Fjz88MOxBQUF5tZbb2359ddfr5ozZ86Kbdu2+R3Laz22u7qIiIjIUbHW8uDXS2m55HmGu36vGPcMegi/TufVWg7TrAfmnFfgi2vZZKN41j2KrZ8tZHLThsSFV3PLCBERERERObFNurcJM8c2rtK1Hc7bzqi31+83Nu6aFiz5PKriuPfNWxny+JZDTRMXF1dy+umn7wG4/PLLc1544YUYgCuuuGInwO7dux3z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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import snlay as snlay\n", "#here we test edge cases where failure happens\n", "#size = np.array([70, 60, 50, 40, 30, 20, 10, 10])\n", "#size = np.array([70, 70, 70, 70, 70, 70, 70, 70])\n", "#size = np.array([30, 30, 30, 30, 30, 30, 30, 30])\n", "\n", "#size = np.array([65, 65, 65, 65, 55, 65, 35, 65])\n", "#size = np.array([68, 30, 38, 60, 63, 60, 68, 68])\n", "\n", "size = np.random.randint(30, 71, 8)\n", "mats = np.array([3, 4, 3, 4, 3, 4, 3, 4])\n", "spec_ac = snlay.calc_spectrum(size, mats, lams)\n", "\n", "print(size)\n", "\n", "\n", "size = (size - 50.0)/20.0\n", "\n", "\n", "spec = model.predict(np.expand_dims(size, axis = 0))\n", "\n", "#spec = model.predict(size)\n", "# print(spec.shape)\n", "spec = np.ravel(spec)\n", "\n", "\n", "fig1 = plt.figure(figsize=(22,5))\n", "ax = fig1.add_subplot(1,1,1)\n", "ax.set_title('silica coated gold')\n", "ax.set_xlabel('Wavelength (nm)')\n", "plt.plot(lams, spec_ac, linewidth=3, label='simulated')\n", "plt.plot(lams, spec, '--', linewidth=3, label='predicted')\n", "plt.plot(lams, np.abs(spec_ac - spec)/spec_ac, label='error')\n", "\n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model Benchmarking" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-08-24T08:36:24.025196Z", "start_time": "2018-08-24T07:15:19.871311Z" }, "code_folding": [], "scrolled": true }, "outputs": [], "source": [ "#Here is where we in-depth model evaluation and benchmarking\n", "\n", "#model = naiveploss_model()\n", "train_e, val_e, test_e, train_t = net_performance(naiveploss_model, 5, 64, 500, 1)\n", "\n", "print(\"Training duration\")\n", "print(np.mean(train_t), np.std(train_t))\n", "\n", "print(\"Training error\")\n", "print(np.mean(train_e), np.std(train_e))\n", "\n", "print(\"Validation error\")\n", "print(np.mean(val_e), np.std(val_e))\n", "\n", "print(\"Testing error\")\n", "print(train_e)\n", "print(np.mean(train_e), np.std(train_e))\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\\\7]=/ we record the timing and resource consumption \n", "'\n", "- naiveploss, \n", "\n", " Total params: 253,250, \n", " training size: 48,000 val size 12,000 test size: 40,000 \n", " \n", " 1 gpu case, 500 epochs, 64 batch size. \n", " Training duration\n", "970.6306939371977 162.52772916709793\n", "Training error\n", "0.28162434966405236 0.004849006439278184\n", "Validation error\n", "0.28847073678970336 0.01748113934849215\n", "Testing error\n", "[0.28093684 0.29020114 0.28278018 0.27629951 0.27790407]\n", "0.28162434966405236 0.004849006439278184\n", " \n", " \n", " 2 gpu case, 500 epochs, 64 batch size. \n", " Training duration\n", "1415.9011616169942 72.01714343631177\n", "Training error\n", "0.14291583093007407 0.0017661558666610126\n", "Validation error\n", "0.14036797358194988 0.005636169118478038\n", "Testing error\n", "[0.14436209 0.14525352 0.14023539 0.14201304 0.14271513]\n", "0.14291583093007407 0.0017661558666610126\n", " \n", " \n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Inverse scattering " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-08-28T04:46:28.710011Z", "start_time": "2018-08-28T04:46:20.687025Z" }, "hidden": true }, "outputs": [], "source": [ "\n", "\n", "model_d = Sequential()\n", "model_d.add(Dense(8, input_dim=1, kernel_initializer='normal', activation='linear', \n", " name='dummy', use_bias=False))\n", "\n", "for layer in model.layers:\n", " model_d.add(layer)\n", "\n", "for layer in model_d.layers[1:]:\n", " layer.trainable = False\n", "\n", "for ind in range(1,len(model_d.layers)):\n", " model_d.layers[ind].set_weights(model.layers[ind-1].get_weights())\n", "\n", "model_d.compile(loss=naive_percent_loss, optimizer='adam') \n", " \n", " \n", "#model_d.summary()\n", "\n", "\n", "# # let us create a target spectrum first\n", "import snlay as snlay\n", "#size = np.array([60, 65, 65, 65, 35, 35, 35, 35])\n", "size = np.random.randint(30,70,8)\n", "mats = np.array([3, 4, 3, 4, 3, 4, 3, 4])\n", "target = snlay.calc_spectrum(size, mats, lams)\n", "\n", "print(size)\n", "\n", "# #do the training here\n", "xd_t = np.ones((1,1))\n", "yd_t = target.reshape(1,250)\n", "\n", "\n", "\n", "\n", "\n", "history = model_d.fit(xd_t, yd_t,\n", " batch_size=1,\n", " epochs=5000, \n", " verbose=0)\n", "\n", "# #here is the final result\n", "size_out = model_d.get_layer('dummy')\n", "wts = size_out.get_weights()\n", "wts = np.array(wts).ravel()\n", "size_res= 0.5*wts*(size_max - size_min) + size_av\n", "size_res_rounded = np.round(size_res)\n", "\n", "spec_zer = model_d.predict(xd_t).ravel()\n", "achieved = snlay.calc_spectrum(size_res_rounded, mats, lams)\n", "\n", "\n", "fig1 = plt.figure(figsize=(22,5))\n", "ax = fig1.add_subplot(1,1,1)\n", "#plt.plot(lams, spec_zer, label='new model')\n", "plt.plot(lams, target, linewidth=2, label='target')\n", "plt.plot(lams, achieved, '--', linewidth=3, label='achieved')\n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\n", "\n", "print(size_res_rounded)\n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Model shipment" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2018-08-25T05:32:45.730860Z", "start_time": "2018-08-25T05:32:45.701134Z" }, "hidden": true }, "outputs": [], "source": [ "\n", " \n", "from keras.models import load_model\n", "\n", "#Creates a HDF5 file 'my_model.h5'\n", "model.save('my_model.h5')\n", "\n", "# Deletes the existing model\n", "#del model \n", "\n", "# Returns a compiled model identical to the previous one\n", "#model = load_model('my_model.h5')\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hidden": true }, "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 }