{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# **Use ML techniques for SERDES CTLE modeling for IBIS-AMI simulation** \n", "## Table of contents: \n", "### 1.**[Motivation](#Motivation)** ...\n", "### 2.**[Problem Statements](#Problem Statements)** ...\n", "### 3.**[Generate Data](#Generate Data)** ...\n", "### 4.**[Prepare Data](#Prepare Data)** ...\n", "### 5.**[Choose a Model](#Choose a Model)** ...\n", "### 6.**[Training](#Training)** ...\n", "### 7.**[Prediction](#Prediction)** ...\n", "### 8.**[Reverse Direction](#Reverse Direction)** ...\n", "### 9.**[Deployment](#Deployment)** ...\n", "### 10.**[Conclusion](#Conclusion)** ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Motivation:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of SPISim's main service is IBIS-AMI modeling and consulting. In most cases, this happens when IC companies is ready to release simulation model for their customers to do system design. We will then require data either from circuit simulation, lab measurements or data sheet spec. in order to create associated IBIS-AMI model.\n", "Occasionally, we also receive request to provide AMI model for architecture planning purpose. In this situation, there is no data or spec. In stead, the client asks to input performance parameters dynamically (not as preset) so that they can evaluate performance at the architecture level before committing to a certain spec. and design accordingly. In such case, we may need to generate data dynamically based on user's input before it will be fed into existing IBIS-AMI models of same kind.\n", "Continues linear equalizer, CTLE, is often used in modern SERDES or even DDR5 design. It is basically a filter in the frequency domain (FD) with various peaking and gain properties. As IBIS-AMI is simulated in the time domain (TD), the core implementations in the model is iFFT to convert into impulse response in TD.\n", "![CtleFDTD](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/CTLEFDTD.png?raw=true)\n", "\n", "In order to create such CTLE AMI model from user provided spec. on the fly, we would like to avoid time-consuming parameter sweep (in order to match the performance) during runtime of initial set-up call. Thus machine learning techniques may be applied to help use build a prediction model to map input attributes to associated CTLE design parameters so that its FD and TD response can be generated directly. After that, we can feed the data into existing CTLE C/C++ code blocks for channel simulation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Problem Statement:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We would like to build a prediction model such that when user provide a desired CTLE performance parameters, such as DC Gain, peaking frequency and peaking value, this model will map to corresponding CTLE design parameters such as pole and zero locations. Once this is mapped, CTLE frequency response will be generated followed by time-domain impulse response. The resulting IBIS-AMI CTLE model can be used for channel simulation for evaluating such CTLE block's impact in a system... before actual silicon design has been done." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Generate Data:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Overview** \n", "The model to be build is for nominal (i.e. numerical) prediction for about three to six attributes, depending on the CTLE structure, from four input parameters, namely dc gain, peak frequency, peak value and bandwidth. We will sample the input space randomly (as full combinatorial is impractical) then perform measurement programmingly in order generate enough dataset for modeling purpose." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Defing CTLE equations**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will target the following two most common CTLE structures: \n", "#### IEEE 802.3bs 200/400Gbe Chip-to-module (C2M) CTLE:\n", "![C2M_CTLE](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/C2M_CTLE.png?raw=true)\n", "\n", "#### IEEE 802.3bj Channel Operating Margin (COM) CTLE:\n", "![COM_CTLE](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/COM_CTLE.png?raw=true)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Define sampling points and attributes**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All these pole and zeros values are continuous (numerical), so a sub-sampling from full solution space will be performed. Once frequency response corresponding to each set of configuration is generated, we will measure is dc gain, peak frequency and value, bandwidth (3dB loss from the peak), and frequencies when 10% and 50% gain between dc and peak values happened. The last two attributes will help us increasing the attributes available when creating the prediction model. \n", "#### Attributes to be extracted:\n", "![CTLEAttr](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/CTLEAttr.png?raw=true)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Synthesize and measure data**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A python script (in order to be used with subsequent Q-learning w/ OpenAI later) has been written to synthesize these frequency response and perform measurement at the same time. \n", "\n", "#### Quantize and Sampling:\n", "![Sampling](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/CTLESamp.png?raw=true)\n", "\n", "#### Synthesize:\n", "![Synthesize](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/CTLEGen.png?raw=true)\n", "\n", "#### Measurement:\n", "![Measurement](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/CTLEMeas.png?raw=true) \n", "\n", "The end results after this data generation phase is a 100,000 points dataset for each of the two CTLE structures. We can now proceed for the prediction modeling." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Prepare Data:**" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "## Using COM CTLE as an example below:\n", "\n", "# Environment Setup:\n", "import os\n", "import pandas as pd\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "prjHome = 'C:/Temp/WinProj/CTLEMdl'\n", "workDir = prjHome + '/wsp/'\n", "srcFile = prjHome + '/dat/COM_CTLEData.csv'\n", "\n", "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n", " path = os.path.join(workDir, fig_id + \".\" + fig_extension)\n", " print(\"Saving figure\", fig_id)\n", " if tight_layout:\n", " plt.tight_layout()\n", " plt.savefig(path, format=fig_extension, dpi=resolution)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 100000 entries, 0 to 99999\n", "Data columns (total 11 columns):\n", "ID 100000 non-null int64\n", "Gdc 100000 non-null float64\n", "P1 100000 non-null float64\n", "P2 100000 non-null float64\n", "Z1 100000 non-null float64\n", "Gain 100000 non-null float64\n", "PeakF 100000 non-null float64\n", "PeakVal 100000 non-null float64\n", "BandW 100000 non-null float64\n", "Freq10 100000 non-null float64\n", "Freq50 100000 non-null float64\n", "dtypes: float64(10), int64(1)\n", "memory usage: 8.4 MB\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDGdcP1P2Z1GainPeakFPeakValBandWFreq10Freq50
count100000.000000100000.0000001.000000e+051.000000e+051.000000e+05100000.0000001.000000e+05100000.0000001.000000e+051.000000e+051.000000e+05
mean49999.5000000.5749111.724742e+105.235940e+095.241625e+090.5749113.428616e+092.3746201.496343e+104.145855e+081.136585e+09
std28867.6577970.2303024.323718e+092.593138e+092.589769e+090.2303024.468393e+093.3460941.048535e+105.330043e+081.446972e+09
min0.0000000.2000001.000000e+101.000000e+091.000000e+090.2000000.000000e+000.2000009.965473e+080.000000e+00-1.000000e+00
25%24999.7500000.3500001.350000e+103.000000e+093.000000e+090.3500000.000000e+000.5000004.770445e+090.000000e+00-1.000000e+00
50%49999.5000000.6000001.700000e+105.000000e+095.000000e+090.6000000.000000e+000.8000001.410597e+100.000000e+00-1.000000e+00
75%74999.2500000.7500002.100000e+107.500000e+097.500000e+090.7500007.557558e+092.7105362.386211e+108.974728e+082.510339e+09
max99999.0000000.9500002.450000e+109.500000e+099.500000e+090.9500001.516517e+1016.7315283.965752e+101.768803e+094.678211e+09
\n", "
" ], "text/plain": [ " ID Gdc P1 P2 Z1 \\\n", "count 100000.000000 100000.000000 1.000000e+05 1.000000e+05 1.000000e+05 \n", "mean 49999.500000 0.574911 1.724742e+10 5.235940e+09 5.241625e+09 \n", "std 28867.657797 0.230302 4.323718e+09 2.593138e+09 2.589769e+09 \n", "min 0.000000 0.200000 1.000000e+10 1.000000e+09 1.000000e+09 \n", "25% 24999.750000 0.350000 1.350000e+10 3.000000e+09 3.000000e+09 \n", "50% 49999.500000 0.600000 1.700000e+10 5.000000e+09 5.000000e+09 \n", "75% 74999.250000 0.750000 2.100000e+10 7.500000e+09 7.500000e+09 \n", "max 99999.000000 0.950000 2.450000e+10 9.500000e+09 9.500000e+09 \n", "\n", " Gain PeakF PeakVal BandW Freq10 \\\n", "count 100000.000000 1.000000e+05 100000.000000 1.000000e+05 1.000000e+05 \n", "mean 0.574911 3.428616e+09 2.374620 1.496343e+10 4.145855e+08 \n", "std 0.230302 4.468393e+09 3.346094 1.048535e+10 5.330043e+08 \n", "min 0.200000 0.000000e+00 0.200000 9.965473e+08 0.000000e+00 \n", "25% 0.350000 0.000000e+00 0.500000 4.770445e+09 0.000000e+00 \n", "50% 0.600000 0.000000e+00 0.800000 1.410597e+10 0.000000e+00 \n", "75% 0.750000 7.557558e+09 2.710536 2.386211e+10 8.974728e+08 \n", "max 0.950000 1.516517e+10 16.731528 3.965752e+10 1.768803e+09 \n", "\n", " Freq50 \n", "count 1.000000e+05 \n", "mean 1.136585e+09 \n", "std 1.446972e+09 \n", "min -1.000000e+00 \n", "25% -1.000000e+00 \n", "50% -1.000000e+00 \n", "75% 2.510339e+09 \n", "max 4.678211e+09 " ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read Data\n", "srcData = pd.read_csv(srcFile)\n", "srcData.head()\n", "\n", "# Info about the data\n", "srcData.head()\n", "srcData.info()\n", "srcData.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Seems full justified! Let's plot some distribution..." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure attribute_histogram_plots\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Drop the ID column\n", "mdlData = srcData.drop(columns=['ID'])\n", "\n", "# plot distribution\n", "mdlData.hist(bins=50, figsize=(20,15))\n", "save_fig(\"attribute_histogram_plots\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are abnomal high peaks for Freq10, Freq50 and PeakF.\n", "We need to plot the FD data to see what's going on...\n", "\n", "#### Error checking:\n", "![NoPeaking](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/CTLENoPeak.png?raw=true)\n", "\n", "Apparently, this is caused by CTLE without peaking. We can safely remove these data points as they will not be used in actual design." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 41588 entries, 1 to 99997\n", "Data columns (total 10 columns):\n", "Gdc 41588 non-null float64\n", "P1 41588 non-null float64\n", "P2 41588 non-null float64\n", "Z1 41588 non-null float64\n", "Gain 41588 non-null float64\n", "PeakF 41588 non-null float64\n", "PeakVal 41588 non-null float64\n", "BandW 41588 non-null float64\n", "Freq10 41588 non-null float64\n", "Freq50 41588 non-null float64\n", "dtypes: float64(10)\n", "memory usage: 3.5 MB\n", "Saving figure attribute_histogram_plots2\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Drop those freq peak at the beginning (i.e. no peak)\n", "mdlTemp = mdlData[(mdlData['PeakF'] > 100)]\n", "mdlTemp.info()\n", "\n", "\n", "# plot distribution again\n", "mdlTemp.hist(bins=50, figsize=(20,15))\n", "save_fig(\"attribute_histogram_plots2\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the distribution seems good. We can proceed to separate variables (i.e. attributes) and targets" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "# take this as modeling data from this point\n", "mdlData = mdlTemp\n", "\n", "varList = ['Gdc', 'P1', 'P2', 'Z1']\n", "tarList = ['Gain', 'PeakF', 'PeakVal']\n", "\n", "varData = mdlData[varList]\n", "tarData = mdlData[tarList]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Choose a Model:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use Keras for the modeling framework. While it will call Tensorflow on our machine in this case, the GPU is only used for training purpose. We will use (shallow) neural network for modeling as we want to implement the resulting models in our IBIS-AMI model's C++ codes." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense_10 (Dense) (None, 64) 320 \n", "_________________________________________________________________\n", "dropout_7 (Dropout) (None, 64) 0 \n", "_________________________________________________________________\n", "dense_11 (Dense) (None, 64) 4160 \n", "_________________________________________________________________\n", "dropout_8 (Dropout) (None, 64) 0 \n", "_________________________________________________________________\n", "dense_12 (Dense) (None, 3) 195 \n", "=================================================================\n", "Total params: 4,675\n", "Trainable params: 4,675\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Dropout\n", "\n", "numVars = len(varList) # independent variables\n", "numTars = len(tarList) # output targets\n", "nnetMdl = Sequential()\n", "# input layer\n", "nnetMdl.add(Dense(units=64, activation='relu', input_dim=numVars))\n", "\n", "# hidden layers\n", "nnetMdl.add(Dropout(0.3, noise_shape=None, seed=None))\n", "nnetMdl.add(Dense(64, activation = \"relu\"))\n", "nnetMdl.add(Dropout(0.2, noise_shape=None, seed=None))\n", " \n", "# output layer\n", "nnetMdl.add(Dense(units=numTars, activation='sigmoid'))\n", "nnetMdl.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Provide some info\n", "#from keras.utils import plot_model\n", "#plot_model(nnetMdl, to_file= workDir + 'model.png')\n", "nnetMdl.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Training:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will do the 20% training/testing split for the modeling.\n", "Note that we need to scale the input attributes to be between 0~1 so that neuron's activation function can be used to differentiate and calculate weights. These scaler will be applied \"inversely\" when we predict the actual performance later on." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import mean_squared_error\n", "from sklearn.model_selection import train_test_split\n", "\n", "# Prepare Training (tran) and Validation (test) dataset\n", "varTran, varTest, tarTran, tarTest = train_test_split(varData, tarData, test_size=0.2)\n", "\n", "# scale the data\n", "from sklearn import preprocessing\n", "varScal = preprocessing.MinMaxScaler()\n", "varTran = varScal.fit_transform(varTran)\n", "varTest = varScal.transform(varTest)\n", "\n", "tarScal = preprocessing.MinMaxScaler()\n", "tarTran = tarScal.fit_transform(tarTran)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can do the model fit:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 29943 samples, validate on 3327 samples\n", "Epoch 1/100\n", "29943/29943 [==============================] - 0s 12us/step - loss: 0.0632 - val_loss: 0.0462\n", "Epoch 2/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0394 - val_loss: 0.0218\n", "Epoch 3/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0218 - val_loss: 0.0090\n", "Epoch 4/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0134 - val_loss: 0.0046\n", "Epoch 5/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0102 - val_loss: 0.0039\n", "Epoch 6/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0090 - val_loss: 0.0036\n", "Epoch 7/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0082 - val_loss: 0.0032\n", "Epoch 8/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0075 - val_loss: 0.0030\n", "Epoch 9/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0071 - val_loss: 0.0027\n", "Epoch 10/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0067 - val_loss: 0.0025\n", "Epoch 11/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0063 - val_loss: 0.0022\n", "Epoch 12/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0059 - val_loss: 0.0020\n", "Epoch 13/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0056 - val_loss: 0.0018\n", "Epoch 14/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0053 - val_loss: 0.0017\n", "Epoch 15/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0050 - val_loss: 0.0015\n", "Epoch 16/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0048 - val_loss: 0.0014\n", "Epoch 17/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0046 - val_loss: 0.0013\n", "Epoch 18/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0045 - val_loss: 0.0012\n", "Epoch 19/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0043 - val_loss: 0.0011\n", "Epoch 20/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0042 - val_loss: 0.0011\n", "Epoch 21/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0041 - val_loss: 9.9891e-04\n", "Epoch 22/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0040 - val_loss: 9.5673e-04\n", "Epoch 23/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0039 - val_loss: 9.1935e-04\n", "Epoch 24/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0038 - val_loss: 8.7424e-04\n", "Epoch 25/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0037 - val_loss: 8.3335e-04\n", "Epoch 26/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0036 - val_loss: 8.0617e-04\n", "Epoch 27/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0035 - val_loss: 7.7511e-04\n", "Epoch 28/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0035 - val_loss: 7.6336e-04\n", "Epoch 29/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0034 - val_loss: 7.4145e-04\n", "Epoch 30/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0034 - val_loss: 7.1555e-04\n", "Epoch 31/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0033 - val_loss: 6.8232e-04\n", "Epoch 32/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0033 - val_loss: 6.8118e-04\n", "Epoch 33/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0033 - val_loss: 6.5987e-04\n", "Epoch 34/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0032 - val_loss: 6.5535e-04\n", "Epoch 35/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0032 - val_loss: 6.4880e-04\n", "Epoch 36/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0032 - val_loss: 6.2126e-04\n", "Epoch 37/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0031 - val_loss: 6.1235e-04\n", "Epoch 38/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0031 - val_loss: 6.0875e-04\n", "Epoch 39/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0030 - val_loss: 5.8204e-04\n", "Epoch 40/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0030 - val_loss: 5.8521e-04\n", "Epoch 41/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0030 - val_loss: 5.8456e-04\n", "Epoch 42/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0030 - val_loss: 5.5742e-04\n", "Epoch 43/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0029 - val_loss: 5.5412e-04\n", "Epoch 44/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0029 - val_loss: 5.5415e-04\n", "Epoch 45/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0029 - val_loss: 5.3159e-04\n", "Epoch 46/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0029 - val_loss: 5.2046e-04\n", "Epoch 47/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0028 - val_loss: 5.1748e-04\n", "Epoch 48/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0028 - val_loss: 5.1205e-04\n", "Epoch 49/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0027 - val_loss: 5.0424e-04\n", "Epoch 50/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0028 - val_loss: 4.9067e-04\n", "Epoch 51/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0027 - val_loss: 4.7902e-04\n", "Epoch 52/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0027 - val_loss: 4.7667e-04\n", "Epoch 53/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0026 - val_loss: 4.6521e-04\n", "Epoch 54/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0026 - val_loss: 4.6684e-04\n", "Epoch 55/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0026 - val_loss: 4.7006e-04\n", "Epoch 56/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0026 - val_loss: 4.5770e-04\n", "Epoch 57/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0025 - val_loss: 4.3075e-04\n", "Epoch 58/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0025 - val_loss: 4.3796e-04\n", "Epoch 59/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0025 - val_loss: 4.3114e-04\n", "Epoch 60/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0025 - val_loss: 4.1051e-04\n", "Epoch 61/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0025 - val_loss: 4.0642e-04\n", "Epoch 62/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0025 - val_loss: 4.1214e-04\n", "Epoch 63/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0025 - val_loss: 3.9472e-04\n", "Epoch 64/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0024 - val_loss: 3.9697e-04\n", "Epoch 65/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0024 - val_loss: 3.8548e-04\n", "Epoch 66/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0024 - val_loss: 3.9030e-04\n", "Epoch 67/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0023 - val_loss: 3.7588e-04\n", "Epoch 68/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0024 - val_loss: 3.6643e-04\n", "Epoch 69/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0023 - val_loss: 3.6973e-04\n", "Epoch 70/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0023 - val_loss: 3.6345e-04\n", "Epoch 71/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0023 - val_loss: 3.5743e-04\n", "Epoch 72/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0023 - val_loss: 3.5294e-04\n", "Epoch 73/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0023 - val_loss: 3.6533e-04\n", "Epoch 74/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0022 - val_loss: 3.5859e-04\n", "Epoch 75/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0022 - val_loss: 3.3832e-04\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 76/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0022 - val_loss: 3.5197e-04\n", "Epoch 77/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0022 - val_loss: 3.4445e-04\n", "Epoch 78/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0022 - val_loss: 3.3888e-04\n", "Epoch 79/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0022 - val_loss: 3.3597e-04\n", "Epoch 80/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0022 - val_loss: 3.2317e-04\n", "Epoch 81/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0021 - val_loss: 3.2205e-04\n", "Epoch 82/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.4191e-04\n", "Epoch 83/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.2288e-04\n", "Epoch 84/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.1419e-04\n", "Epoch 85/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.1307e-04\n", "Epoch 86/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.1795e-04\n", "Epoch 87/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.1200e-04\n", "Epoch 88/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.0641e-04\n", "Epoch 89/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.2401e-04\n", "Epoch 90/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0021 - val_loss: 3.0903e-04\n", "Epoch 91/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 3.1448e-04\n", "Epoch 92/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 3.0788e-04\n", "Epoch 93/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 3.0349e-04\n", "Epoch 94/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 3.0098e-04\n", "Epoch 95/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0020 - val_loss: 3.1119e-04\n", "Epoch 96/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 3.0249e-04\n", "Epoch 97/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 2.8934e-04\n", "Epoch 98/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 2.9429e-04\n", "Epoch 99/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0020 - val_loss: 2.8466e-04\n", "Epoch 100/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0019 - val_loss: 3.0773e-04\n" ] }, { "data": { "text/plain": [ "0.01786895428237113" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# model fit\n", "hist = nnetMdl.fit(varTran, tarTran, epochs=100, batch_size=1000, validation_split=0.1)\n", "tarTemp = nnetMdl.predict(varTest, batch_size=1000)\n", "#predict = tarScal.inverse_transform(tarTemp)\n", "#resRMSE = np.sqrt(mean_squared_error(tarTest, predict))\n", "resRMSE = np.sqrt(mean_squared_error(tarScal.transform(tarTest), tarTemp))\n", "resRMSE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see how this neural network learns over different Epoch" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot history\n", "plt.plot(hist.history['loss'])\n", "plt.title('Model loss')\n", "plt.ylabel('Loss')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Val'], loc='upper right')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looks quite reasonable. We can save the Keras model now together with scaler for later evaluation." ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saved model to disk\n" ] } ], "source": [ "# save model and architecture to single file\n", "nnetMdl.save(workDir + \"COM_nnetMdl.h5\")\n", "\n", "# also save scaler\n", "from sklearn.externals import joblib\n", "joblib.dump(varScal, workDir + 'VarScaler.save') \n", "joblib.dump(tarScal, workDir + 'TarScaler.save') \n", "print(\"Saved model to disk\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Prediction:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's use this model to make some prediction" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "# generate prediction\n", "predict = tarScal.inverse_transform(tarTemp)\n", "allData = np.concatenate([varTest, tarTest, predict], axis = 1)\n", "allData.shape\n", "headLst = [varList, tarList, tarList]\n", "headStr = ''.join(str(e) + ',' for e in headLst)\n", "np.savetxt(workDir + 'COMCtleIOP.csv', allData, delimiter=',', header=headStr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take some 50 points and see how the prediction work" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X9wHPWZ5/H3I1nCUgh2gkSILCWwlONaH+flh/ClNq4jieO1HTY2uRzGsNSSu/jMFQu+5DYGu+B8nHZTEHvvIE7BBsVFhSxJjJKAIw4ohfVtsuVUSCRjI4MTHY43iX4kWIbYHGUZ/fBzf8zIHo1nNDNyz/R0z+dVpdL0d76afvrHPOr5TvfT5u6IiEi8VIUdgIiIBE/JXUQkhpTcRURiSMldRCSGlNxFRGJIyV1EJIZyJncze8zMjpjZK1meNzPbbmaHzKzXzK4KPkwRESlEPkfu3wBWTPP8SmB+8mc98PfnHpaIiJyLnMnd3f8ZeHOaLquBb3rCi8BcM3t/UAGKiEjhZgXwGvOA/pTpgWTb76b7o4aGBr/kkksCmL2ISOXYu3fvUXdvzNUviORuGdoy1jQws/Ukhm74wAc+QE9PTwCzFxGpHGb2m3z6BXG2zADQkjLdDAxl6uju7e7e6u6tjY05//GIiMgMBZHcO4G/TJ4182HguLtPOyQjIiLFlXNYxsy+A3wUaDCzAeC/AzUA7v414Dngk8Ah4ATwH4oVrIiI5Cdncnf3m3I878BfBRaRiIicM12hKiISQ0ruIiIxpOQuIhJDSu4iIjGk5C4iEkNBXKEqUlF27RtkW1cfQ8dGaJpbx8blC7j+ynlhhyUyhZK7SAF27Rtk81MHGBmbAGDw2AibnzoAoAQvZUXDMiIF2NbVdzqxTxoZm2BbV19IEYlkpuQuUoChYyMFtYuERcMyIgVomlvH1W+9wF2zOmiyowx5A1vH17D3gmVhhyYyhZK7SAEeWvgal+/dQZ2NAtBsR/lyzQ5eWXgJ8PFQYxNJpWEZkQJc86uvnk7sk+pslGt+9dWQIhLJTMldpBDHBwprFwmJkrtIIeY0F9YuEhIld5FCLN0CNXVT22rqEu0iZUTJXaQQi9bAp7bDnBbAEr8/tT3RLlJGdLaMSKEWrVEyl7KX15G7ma0wsz4zO2RmmzI8/0Ez221mvWb2IzPTAKSISIhyJnczqwYeBlYCC4GbzGxhWre/A77p7ouANuD+oAMVEZH85XPkvhg45O6H3X0U2AmsTuuzENidfPxPGZ4XEZESyie5zwP6U6YHkm2pXgY+k3z8aeDdZnZh+guZ2Xoz6zGznuHh4ZnEKyIiecgnuVuGNk+b/iJwrZntA64FBoHxs/7Ivd3dW929tbGxseBgRUQkP/mcLTMAtKRMNwNDqR3cfQj4dwBmdj7wGXc/HlSQIiJSmHyO3LuB+WZ2qZnVAmuBztQOZtZgZpOvtRl4LNgwRdL0dsCDl8N9cxO/ezvCjkikrORM7u4+DtwBdAG/ADrc/VUzazOzVcluHwX6zOz/Au8DvlSkeEUSifyZDXC8H/DE72c2KMGLpDD39OHz0mhtbfWenp5Q5i0R9+DlycSeZk4LfOGV0scjUkJmttfdW3P1U/kBiR5VZhTJScldokeVGUVyUnKX6FFlRpGclNwlelSZUSQnVYWUSNo18RG2vbOdoZMjNM2uY+PEAq4POyiRMqLkLpGza98gm586wMjYBACDx0bY/NQBAK6/Mr0yhkhl0rCMRM62rr7TiX3SyNgE27r6QopIpPwouUvkDB0bKahdpBIpuUvkNM2tK6hdpBIpuUvkbFy+gLqa6iltdTXVbFy+IKSIRMqPvlCVyJn80nRbVx9Dx0ZomlvHxuUL9GWqSAold4mk66+cp2QuMg0Ny4hIfKgU9Gk6cheReJgsBT2WPGtqshQ0BHv1cm8H7G5LFKqb05woe1GGV0fryF1E4mF325nEPmlsJNEelAjdS0DJXeJFH8tzy7aOor7uSlEKuhT/QAKS17CMma0AvgJUAzvc/YG05z8APA7MTfbZ5O7PBRyryPRK9bE8yrKto9++CC9/O9rrbk5zlpu4BFgKOkL3Esh55G5m1cDDwEpgIXCTmS1M63YvidvvXUniHquPBB2oSE4ROqoKTbZ1tPcb0V93S7cwXj17StN49exgS0FH6F4C+QzLLAYOufthdx8FdgKr0/o4cEHy8RxgKLgQRfLjWY6esrVXoqzryCcyt0do3e2a+AibxtYxcKqBU24MnGpg09g6dk18JLB5dF92JyNeO6VtxGvpvuzOwOYRlHyGZeYBqZ91BoB/k9bnPuCHZnYn8C7gE4FEJ1KA12ngYoaztAtkX0cTXsUsO5WlfzRs6+pjcPRP+R5/OqX9p119gV0T8fmD87l6bB13zeqgyd5gyC9k6/ga9h6cz09WBTKLwORz5G4Z2tLvqn0T8A13bwY+CfyDmZ312ma23sx6zKxnePjsHUzkXNw/egMn0o6qTngt94/eEFJE5SfbOvrWxMcjv+5KUVBu6NgInaeWsGR0O3/0zrdYMrqdzlNLyrJoXT7JfQBoSZlu5uxhl88BHQDu/lNgNtCQ/kLu3u7ure7e2tjYOLOIRbLouWBZxo/lPRcsCzu0spFtHbVNfC7y664UBeWiVLQun2GZbmC+mV0KDJL4wvTmtD6/BZYC3zCzPyaR3HVoLiW1cfkCNj81SufoktNtdTXV3K+CYqdlW0c3XT2P7++9NtLrLrFsB6bU+g+6oFwp5hGUnMnd3cfN7A6gi8Rpjo+5+6tm1gb0uHsn8NfA183sCySGbD7r7ulDNyJFpYJiuU23jlo/+N5Ir7tSbP8o7WMWVg5ubW31np6eUOYtIhJVZrbX3Vtz9dMVqiIiMaTkLucm6pesi8SUqkLKzOlyf5GypSN3mTld7i9StnTkLvnJVMM6QkWUYi0i9cWltJTcJbfeDsZ/cCezJk4mpo/3J6br3gMjb57dvwyLKMVWtm0DSvAVTsMyktOJ57ecSR5JsyZO8vY745EpohRX2bbNiecDrIQokaTkLjnNHvl9xvb6if/H3WmXrN89to7PH5xf4ggrV7Ztk61dKoeGZSSnoVMX0lx19Ox2v5DOU0umXLIOYGVYRCmusm6bUxeiwbHKpiN3yWlH7S0ZKwb+3cSNGfuXYxGluMq2bXbU3hJSRFIulNwlpyuuW88WXz9l+GWLr+f8a26irqZ6St9yLaIUV9m2zRXXrQ87NAmZhmUkp0RRpNu5sWtp7IpNRd1020YqmwqHiYhEiAqHiYhUMCV3EZEYUnIXEYkhJXcRkRjK62wZM1sBfIXEbfZ2uPsDac8/CHwsOVkPXOTuc4MMVEpj175Bnf0SE9qWlS1ncjezauBhYBkwAHSbWae7H5zs4+5fSOl/J3BlEWKVItu1b5A9Tz/Ck+yk6byjDJ1o4KGn1wK3KylEjLal5DMssxg45O6H3X0U2Amsnqb/TcB3gghOSmv/s+20WTvNVUepMmiuOkqbtbP/2fawQ5MCaVtKPsl9HtCfMj2QbDuLmX0QuBT4P1meX29mPWbWMzw8XGisUmTrRp+g3kantNXbKOtGnwgpIpkpbUvJJ7lbhrZsVz6tBb7n7hOZnnT3dndvdffWxsbGfGOUEmmqeqOgdilf2paST3IfAFpSppuBoSx916Ihmcg6WXdxQe1SvrQtJZ/k3g3MN7NLzayWRALvTO9kZguA9wA/DTZEKZX6lW2MV8+e0jZePZv6lbonatRoW0rO5O7u48AdQBfwC6DD3V81szYzW5XS9SZgp4dVrEbO3aI1zFr9VZjTAhjMaUlM63Zt0aNtWfFUOExEJEJUOEyy6+2ABy+H++Ymfvd2hB2RiARM9dwrTW8HPLMBxpK3wjven5gGfWSX8PR2wO42OD4Ac5ph6Rbtj+dIR+6VZnfbmcQ+aWwk0S5SqCA+BU4ecBzvB/zMAYc+UZ4TJfdKc3ygsHaRbIJKyjrgKAol90ozp7mwdpFsgkrKOuAoCiX3CtN92Z2MeO2UthGvpfuyO0OKSKLKsyTfbO3ZnMhyYVW2dsmPknuF+fzB+dw9to6BUw2ccmPgVAN3j63j8wfnhx2aRMzrNBTUns3WsRs5kXbAccJr2Tp244xjE50tU3GGjo0wyBI6R5dMabdjI1n+QiSz+0dv4P6aHVMKlJ3wWu4fu4GvFPA6j7+9mDerRrlrVgdN9gZDfiFbx9fwzDuLuS/wqCuHknuFaZpbx2CGRN40ty6EaCTKei5Yxqa3OCsp771gWUGv0zS3js5jZx9wzNM+eU40LFNhNi5fQF1N9ZS2uppqNi5fEFJEElUbly/gheprWTK6nT9651ssGd3OC9XXFrwvaZ8sDh25V5jJu/Do9mtyroLal7RPFodqy4iIRIhqy4iIVDAldxGRGKqc5K5KiCJSQSrjC1VVQhSRCpPXkbuZrTCzPjM7ZGabsvRZY2YHzexVM/t2sGGeIxUmEpEKk/PI3cyqgYeBZSRult1tZp3ufjClz3xgM/ARd/+DmV1UrIBnRIWJRKTC5HPkvhg45O6H3X0U2AmsTuvzn4CH3f0PAO5+JNgwz40KE4lIpcknuc8D+lOmB5JtqT4EfMjMfmJmL5rZiqACDIIKE4lIpcknuVuGtvQrn2YB84GPAjcBO8xs7lkvZLbezHrMrGd4eLjQWGfs8bcXsymtEuKmsXU8/vbiksUgIlJK+ZwtMwC0pEw3A0MZ+rzo7mPAv5hZH4lk353ayd3bgXZIXKE606ALpcJEIlJp8jly7wbmm9mlZlYLrAU60/rsAj4GYGYNJIZpDgcZ6LlQYSIRqTQ5j9zdfdzM7gC6gGrgMXd/1czagB5370w+92dmdhCYADa6+xvFDLwQKkwkIpVGhcNERCJEhcNERCqYkruISAwpuYuIxFB0k7uqPIqIZBXNqpC9HYz/4E5mTZxMTB/vT0zDjKo8dnc+SstL27jIhzlijfRftZFrVt0WaMiZ7No3mPEMnmztIjIzYb3HwxTJ5H7i+S3UTyb2pFkTJxPtBSb37s5HuXzvvdTZKBhczDBz9t5LNxR14+/aN8iepx/hSXbSdN5Rhk408NDTa+n5zVq+v3eQkbEJAAaPjbD5qQMASvAiMxDWezxskRyWmT3y+4Lap9Py0rbERk9RZ6O0vLRtRrHla/+z7bRZO81VR6kyaK46Spu183b3d1g28WP21G7g8Hk3s6d2A8smfsy2rr6ixiMSV2G9x8MWySP3oVMX0lx1NHN7ga91kQ9nrJ5zkZ/9+kFaN/oE9VVTd7h6G+W/VT9OnY1Sn9wZm+0oD9TsYPNbAB8vakwicRTWezxskTxy31F7S8Yqjztqbyn4tY5YY5b2hhnFlq+mqswX8L7X3j6d2CfV2yiba79b1HhE4iqs93jYIpncr7huPVt8/ZQqj1t8PVdct77g1+q/aiMjaf8oRryW/qs2BhVuRiez1ZLPVIMTeB/xPsoQKZaw3uNhi+SwTOKLxdu5sWvpOZ9Rcs2q2+iG5DfpRzliDfRfXfxv0utXtk094wcYr57NrNp6GHnzrP42p9ABJxGB8N7jYVNtmTD1diTu43p8AOY0w9ItifbUm3kD1NTBp7brZt4ikndtmUgeucfGojXZE3Z60ldiF5ECKLmXo+mSvohIHiL5haqIiExPyV1EJIbySu5mtsLM+szskJltyvD8Z81s2Mz2J3/WBR+qiIjkK+eYu5lVAw8Dy0jcCLvbzDrd/WBa1yfd/Y4ixFiQciy6VY4xiRST9vnw5fOF6mLgkLsfBjCzncBqID25h27XvkE2P3WgrIpulWNMIsWkfb485DMsMw/oT5keSLal+4yZ9ZrZ98ysJZDoCrStq6/sim6VY0wixbStq+90Yp80Mjahfb7E8knumS6IT7/y6RngEndfBPwj8HjGFzJbb2Y9ZtYzPDxcWKR5aH3rBR6o2TGl0uIDNTtofeuFwOcV5ZhEimno2AirqvZMOaBZVbWHoWMjuf9YApNPch8AUo/Em4Gh1A7u/oa7v5Oc/DpwdaYXcvd2d29199bGxszFfM7F5trvll3RrXKMSaSYbj3/5xkPaG49/+dhh1ZR8knu3cB8M7vUzGqBtUBnagcze3/K5CrgF8GFmL9sxbXCLLpVjjGJFNNdNU9mPKC5q+bJkCKqTDmTu7uPA3cAXSSSdoe7v2pmbWa2Ktltg5m9amYvAxuAzxYr4OlkK64VZtGtcoxJpJjqs9w0J1u7FEde57m7+3Pu/iF3v8zdv5Rs2+LuncnHm939X7n7n7j7x9z9l8UMOqulWxJFtlLV1J0pyBWGcoxJpJiyHbjogKak4nWF6qI1ieqJc1oAS/wOu5piOcYkUkw6oCkLKvkrIsHLVM5aBzSBUMlfEQmPKpuGLl7DMiIiAii5i4jEkoZlpKQKLSjV3flo8t6XwxyxRvqvmtm9L2dSyErFr84Ial1onZaOkruUTKEFpbo7H+XyvfdSZ6NgcDHDzNl7L91QUILftW+QPU8/wpPspOm8owydaOChp9cCt2dNLCp+dUZQ62Im20FmTsMyUjKFFlFreWlbIrGnqLNRWl7aVtB89z/bTpu1T7kcvs3a2f9s+7SxqvhVQlDF72ayHWTmlNylZAotonaRZy4ud5EXVrph3egTGS+HXzf6RNa/UfGrM4IqfjeT7SAzp+QuJVNoEbUjlrm43BFrKGi+TVVvFNQOKn6VKqjidzPZDjJzSu5SMoUWUeu/aiMjXjulbcRr6b9qY0HzPVl3cUHtoOJXqYIqfjeT7SAzp+QuJVNoEbVrVt3GK1f/Lb+nkVNu/J5GXrn6bws+W6Z+ZRvj1bOntI1Xz6Z+ZVv2v1Hxq9OCKn43k+0gM6ezZaR0lm6BZzbAWMq4dY6aI9esug2Syfzi5E/BFq1J7Ogpl8PPynU5/JxmON6fub3SzGC7ZTST7SAzptoyUlpRqTnS25E5oVVq0beobLcKkG9tGSV3kWyU0KQMqXCYyLlS8SuJMH2hKiISQ3kldzNbYWZ9ZnbIzDZN0+/fm5mbWc6PDJHQ2wEPXg73zU387u0IOyIRkbzkHJYxs2rgYWAZMAB0m1mnux9M6/duEvdP/VkxAi253g7Gf3AnsyZOJqaP9yemoew+qgdVXEvOjbZD6Whd55bPkfti4JC7H3b3UWAnsDpDv78BtgInA4wvNCee33ImsSfNmjjJiefL61Zhk8W1LmaYqmRxrcv33kt356Nhh1ZRtB1KR+s6P/kk93lA6gm/A8m208zsSqDF3f93gLGFanaWi1WytYclqOJacm60HUpH6zo/+SR3y9B2+vxJM6sCHgT+OucLma03sx4z6xkezlwUqlwMnbqwoPawBFVcS86NtkPpaF3nJ5/kPgC0pEw3A0Mp0+8GLgd+ZGa/Bj4MdGb6UtXd29291d1bGxszF4UqFztqb+FEWl2TE17LjtpbQooos6CKa8m50XYoHa3r/OST3LuB+WZ2qZnVAmuBzskn3f24uze4+yXufgnwIrDK3SN9hdIV161ni69n4FQDp9wYONXAFl/PFdetDzu0KYIqriXnRtuhdLSu85PzbBl3HzezO4AuoBp4zN1fNbM2oMfdO6d/hWhK3Bnmdm7sWlrWtwS7ZtVtdEPyzIGjHLEG+q/WmQOlpu1QOlrX+VH5ARGRCMm3/ICuUBURiSEldxGRGFJyFxGJISV3EZEYUsnfAO3aN8i2rr6yPrtGJErCek/F4b2s5B6QXfsG2fP0IzzJTprOO8rQiQYeenotcHvkdgqRcrBr3yCbnzrAyNgEAIPHRtj81AGAor6nwppv0DQsE5D9z7bTZu00Vx2lyqC56iht1s7+Z9vDDk0kkrZ19Z1OsJNGxibY1tVX9Pkum/gxe2o3cPi8m9lTu4FlEz8u+nyDpuQekHWjT1CfVsyo3kZZN/pESBGJRNvQsRFWVe2ZkmRXVe1h6NhI7j8+B61vvcADNTumHKg9ULOD1rdeKOp8g6bkHpCmqjcKaheR6d16/s8zJtlbz/95Uee7ufa7GQ/UNtd+t6jzDZqSe0BO1l1cULuITO+umiczJtm7ap4s6nzfR+bqktnay5WSe0DqV7YxXj17Stt49WzqV7aFFJFItNVnuXdCtvag2JzmgtrLlZJ7UBatYdbqr8KcFsBgTktiusxuyScSGdmSabGT7NItUFM3ta2mLtEeIToVMkiL1iiZiwRl6RZ4ZgOMpXyBWookO/ke3t0GxwcS/0yWbonce1vJXUTKU5hJNgYHakruIlK+YpBkw6IxdxGRGMoruZvZCjPrM7NDZrYpw/P/2cwOmNl+M9tjZguDD1VERPKVc1jGzKqBh4FlJG6W3W1mne5+MKXbt939a8n+q4D/BawoQrwVLQ7FjMpNmOs027wLbZeZC3Kdltv2yWfMfTFwyN0PA5jZTmA1cDq5u/tbKf3fBYRz774Yi0sxo3IS5jrNNu+e37zJ9/cO5t1eiljjKsjtX47vz3yGZeYB/SnTA8m2Kczsr8zsV8BWYEMw4cmksIooxVmY6zTbvL/zs/6C2rX9Zy7I7V+OxcbySe6Woe2sI3N3f9jdLwPuBu7N+EJm682sx8x6hoeHC4u0wmUrllTsIkpxFuY6zTaPiSw3rJ9wD6WIVpwFWZisHIuN5ZPcB4CWlOlmYGia/juB6zM94e7t7t7q7q2NjY35Ryk0za3LuCM2za3L/ceSUZjrNNs8qi3TsRRcX/2TUIpoxVmQhcnKsdhYPmPu3cB8M7sUGATWAjendjCz+e7+WnLyOuA1JFAPLXyNy/fuoC65AzXbUb5cs4NXFl4CfDzU2KIqzHW6cfkC9jz9CJ9nJ012lCFv4CHWMvuqtZx8aedZ7fec9z3qx7IV0fofRY01ru6qeZL68WDWaTkWG8uZ3N193MzuALqAauAxd3/VzNqAHnfvBO4ws08AY8AfgFuLGXQluuZXX4W0I4M6G020c1s4QUVcmOv0+uqf8Oc1O5g1cRJI/GN5oHoHs2aNMF7zrbPbx05mfJ1iF9GKsyALk9mcZjjen7k9JHldoeruzwHPpbVtSXn8XwKOS9IdHyisXXILc53ubjudwCfNmjgJe7/BLJ84u92qIa0dKH4RrTjLkpBntE7DqoMzDV2hGhVhVciLszDXabZ/IJkS+GR7DCoVlpUgqz8uWgOf2j6lKiyf2h5q6QQl96iISRnSshLmOs32D8Sqs/RvKbvkEXlBJ+RFa+ALr8B9xxK/Q9425llOvSq21tZW7+npCWXekdXbEfkypGUnrHXa25H5Y/yf3Awvf/vsdiVySTKzve7emrOfkrtISLL9Y9E/cZmGkruISAzlm9w15i4iEkNK7iIiMaTkLiISQ0ruIiIxpOQuIhJDSu4iIjGk5C4iEkNK7iIiMaTkLiISQ0rucdbbAQ9eDvfNTfzu7SjfeYcZq0gM5VXPXdJEofZHemGq4/2JaSh+rIXOO8xYSyEK+4sUT0jbX0fuhZpMRMf7AT+TiMrtSHN329TKgpCY3t1WfvMOM9Zii8r+IsUR4vbPK7mb2Qoz6zOzQ2a2KcPz/9XMDppZr5ntNrMPBh9qmYhKIgrzLkOFzjvOd5mKyv4ixRHi9s+Z3M2sGngYWAksBG4ys4Vp3fYBre6+CPgesDXoQMuFZ0k42drDcqLu4oLaw5x3mLEWW1T2FymOMLd/Pkfui4FD7n7Y3UeBncDq1A7u/k/ufiI5+SIQ23u/vU5DQe1h2Tp2Iye8dkrbCa9l69iNZTfvMGMttqjsL1IcYW7/fJL7PCD1LrIDybZsPgc8n+kJM1tvZj1m1jM8PJx/lGXk/tEbMiai+0dvCCmizB5/ezGbxtYxcKqBU24MnGpg09g6Hn97cdnNO8xYiy0q+4sUR5jbP5+zZSxDW8Y7fJjZLUArcG2m5929HWiHxM068oyxrPRcsIxNb8FdszposjcY8gvZOr6GvRcsCzu0KZrm1tF5bAmdo0umtM+bW5flL8Kbd5ixFltU9hcpjjC3fz7JfQBoSZluBobSO5nZJ4B7gGvd/Z1gwis/G5cvYPNTo1MSUV1NNfcvXxBiVGdLxHmAkbGJ0211NdVsLEGchc47zFiLLSr7ixRHmNs/n+TeDcw3s0uBQWAtcHNqBzO7EngUWOHuRwKPsoxcf2ViRGpbVx9Dx0ZomlvHxuULTreXizDjLHTeUVmnMxHnZZPcwtz+ed1D1cw+CTwEVAOPufuXzKwN6HH3TjP7R+BfA79L/slv3X3VdK+pe6iKiBQu33uo5nWFqrs/BzyX1rYl5fEnCo5QRESKRleoiojEkJK7iEgMKbmLiMSQkruISAwpuYuIxJCSu4hIDCm5i4jEkJK7iEgM5XWFalFmbDYM/CaAl2oAjgbwOlGiZa4MWubKUOgyf9DdG3N1Ci25B8XMevK5FDdOtMyVQctcGYq1zBqWERGJISV3EZEYikNybw87gBBomSuDlrkyFGWZIz/mLiIiZ4vDkbuIiKQp++RuZo+Z2REzeyWl7b1m9oKZvZb8/Z5ku5nZdjM7ZGa9ZnZVeJHPXJZlvsHMXjWzU2bWmtZ/c3KZ+8xseekjPndZlnmbmf0yuS2fNrO5Kc/FdZn/Jrm8+83sh2bWlGyP7b6d8twXzczNrCE5HfllzrKN7zOzweQ23p+8GdLkc8Ht1+5e1j/AvwWuAl5JadsKbEo+3gR8Ofn4k8DzJG7q/WHgZ2HHH+Ay/zGwAPgR0JrSvhB4GTgPuBT4FVAd9jIEtMx/BsxKPv5yynaO8zJfkPJ4A/C15OPY7tvJ9hagi8S1Lw1xWeYs2/g+4IsZ+ga6X5f9kbu7/zPwZlrzauDx5OPHgetT2r/pCS8Cc83s/aWJNDiZltndf+HufRm6rwZ2uvs77v4vwCFgcQnCDFSWZf6hu48nJ18kcXN2iPcyv5Uy+S5g8kux2O7bSQ8Cd3FmeSEGyzzN8mYS6H5d9sk9i/e5++8Akr8vSrbPA/pT+g0k2+KsUpb5P5I4ioOYL7OZfcnM+oG/ACZvZxnbZTazVcCgu7+c9lRslxm4IznU9NjksDIBL29Uk3s2lqEt7qcDxX6ZzeweYBz41mRThm6xWWZ3v8fdW0gs7x3J5lgus5nVA/dw5p/YlKcztEVSWpRzAAABe0lEQVR+mYG/By4DrgB+B/zPZHugyxvV5P765Mez5O8jyfYBEmN3k5qBoRLHVmqxXmYzuxX4c+AvPDkwScyXOcW3gc8kH8d1mS8jMb78spn9msRyvWRmFxPTZXb31919wt1PAV/nzNBLoMsb1eTeCdyafHwr8IOU9r9Mfsv+YeD45PBNjHUCa83sPDO7FJgP/DzkmAJhZiuAu4FV7n4i5ak4L/P8lMlVwC+Tj2O5b7v7AXe/yN0vcfdLSCS4q9z998R0mdO+N/g0MHkmTbD7ddjfJufxbfN3SHx0GSOx4T8HXAjsBl5L/n5vsq8BD5P4lvkAKWeVROknyzJ/Ovn4HeB1oCul/z3JZe4DVoYdf4DLfIjEGOT+5M/XKmCZv598s/cCzwDzkn1ju2+nPf9rzpwtE/llzrKN/yG5PL0kEvr7U/oHtl/rClURkRiK6rCMiIhMQ8ldRCSGlNxFRGJIyV1EJIaU3EVEYkjJXUQkhpTcRURiSMldRCSG/j9vj8z6qwX+mAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot some data\n", "begIndx = 100\n", "endIndx = 150\n", "indxAry = np.arange(0, len(varTest), 1)\n", "\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,0][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,0][begIndx:endIndx])" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot Peak Freq.\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,1][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,1][begIndx:endIndx])" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot Peak Value\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,2][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,2][begIndx:endIndx])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Reverse Direction:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The goal of this modeling is to map performance to CTLE poles and zeros locations. What we just did is the other way around (to make sure such neural network's structure meets our need). Now we needs to reverse the direction for actual modeling. To provide more attributes for better predictions, we will also use frequencies where 10% and 50% gain happened as part of the input attributes." ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "tarList = ['Gdc', 'P1', 'P2', 'Z1']\n", "varList = ['Gain', 'PeakF', 'PeakVal', 'Freq10', 'Freq50']\n", "\n", "varData = mdlData[varList]\n", "tarData = mdlData[tarList]" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense_13 (Dense) (None, 64) 384 \n", "_________________________________________________________________\n", "dropout_9 (Dropout) (None, 64) 0 \n", "_________________________________________________________________\n", "dense_14 (Dense) (None, 64) 4160 \n", "_________________________________________________________________\n", "dropout_10 (Dropout) (None, 64) 0 \n", "_________________________________________________________________\n", "dense_15 (Dense) (None, 4) 260 \n", "=================================================================\n", "Total params: 4,804\n", "Trainable params: 4,804\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Dropout\n", "\n", "numVars = len(varList) # independent variables\n", "numTars = len(tarList) # output targets\n", "nnetMdl = Sequential()\n", "# input layer\n", "nnetMdl.add(Dense(units=64, activation='relu', input_dim=numVars))\n", "\n", "# hidden layers\n", "nnetMdl.add(Dropout(0.3, noise_shape=None, seed=None))\n", "nnetMdl.add(Dense(64, activation = \"relu\"))\n", "nnetMdl.add(Dropout(0.2, noise_shape=None, seed=None))\n", " \n", "# output layer\n", "nnetMdl.add(Dense(units=numTars, activation='sigmoid'))\n", "nnetMdl.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Provide some info\n", "#from keras.utils import plot_model\n", "#plot_model(nnetMdl, to_file= workDir + 'model.png')\n", "nnetMdl.summary()" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import mean_squared_error\n", "from sklearn.model_selection import train_test_split\n", "\n", "# Prepare Training (tran) and Validation (test) dataset\n", "varTran, varTest, tarTran, tarTest = train_test_split(varData, tarData, test_size=0.2)\n", "\n", "# scale the data\n", "from sklearn import preprocessing\n", "varScal = preprocessing.MinMaxScaler()\n", "varTran = varScal.fit_transform(varTran)\n", "varTest = varScal.transform(varTest)\n", "\n", "tarScal = preprocessing.MinMaxScaler()\n", "tarTran = tarScal.fit_transform(tarTran)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 29943 samples, validate on 3327 samples\n", "Epoch 1/100\n", "29943/29943 [==============================] - 0s 15us/step - loss: 0.0800 - val_loss: 0.0638\n", "Epoch 2/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0578 - val_loss: 0.0457\n", "Epoch 3/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0458 - val_loss: 0.0380\n", "Epoch 4/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0408 - val_loss: 0.0344\n", "Epoch 5/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0378 - val_loss: 0.0317\n", "Epoch 6/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0354 - val_loss: 0.0299\n", "Epoch 7/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0340 - val_loss: 0.0287\n", "Epoch 8/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0327 - val_loss: 0.0276\n", "Epoch 9/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0315 - val_loss: 0.0265\n", "Epoch 10/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0303 - val_loss: 0.0254\n", "Epoch 11/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0293 - val_loss: 0.0244\n", "Epoch 12/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0284 - val_loss: 0.0235\n", "Epoch 13/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0274 - val_loss: 0.0225\n", "Epoch 14/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0266 - val_loss: 0.0215\n", "Epoch 15/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0257 - val_loss: 0.0202\n", "Epoch 16/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0245 - val_loss: 0.0189\n", "Epoch 17/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0235 - val_loss: 0.0175\n", "Epoch 18/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0223 - val_loss: 0.0160\n", "Epoch 19/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0213 - val_loss: 0.0146\n", "Epoch 20/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0202 - val_loss: 0.0135\n", "Epoch 21/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0193 - val_loss: 0.0125\n", "Epoch 22/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0186 - val_loss: 0.0117\n", "Epoch 23/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0179 - val_loss: 0.0109\n", "Epoch 24/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0171 - val_loss: 0.0104\n", "Epoch 25/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0167 - val_loss: 0.0099\n", "Epoch 26/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0163 - val_loss: 0.0094\n", "Epoch 27/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0156 - val_loss: 0.0090\n", "Epoch 28/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0154 - val_loss: 0.0087\n", "Epoch 29/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0151 - val_loss: 0.0084\n", "Epoch 30/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0146 - val_loss: 0.0081\n", "Epoch 31/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0143 - val_loss: 0.0077\n", "Epoch 32/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0139 - val_loss: 0.0074\n", "Epoch 33/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0138 - val_loss: 0.0072\n", "Epoch 34/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0135 - val_loss: 0.0071\n", "Epoch 35/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0132 - val_loss: 0.0069\n", "Epoch 36/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0131 - val_loss: 0.0068\n", "Epoch 37/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0130 - val_loss: 0.0066\n", "Epoch 38/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0129 - val_loss: 0.0065\n", "Epoch 39/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0127 - val_loss: 0.0063\n", "Epoch 40/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0124 - val_loss: 0.0062\n", "Epoch 41/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0122 - val_loss: 0.0061\n", "Epoch 42/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0122 - val_loss: 0.0059\n", "Epoch 43/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0120 - val_loss: 0.0059\n", "Epoch 44/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0119 - val_loss: 0.0057\n", "Epoch 45/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0118 - val_loss: 0.0057\n", "Epoch 46/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0117 - val_loss: 0.0056\n", "Epoch 47/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0115 - val_loss: 0.0055\n", "Epoch 48/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0114 - val_loss: 0.0055\n", "Epoch 49/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0114 - val_loss: 0.0055\n", "Epoch 50/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0112 - val_loss: 0.0053\n", "Epoch 51/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0111 - val_loss: 0.0052\n", "Epoch 52/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0112 - val_loss: 0.0052\n", "Epoch 53/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0111 - val_loss: 0.0052\n", "Epoch 54/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0109 - val_loss: 0.0051\n", "Epoch 55/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0108 - val_loss: 0.0050\n", "Epoch 56/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0107 - val_loss: 0.0049\n", "Epoch 57/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0107 - val_loss: 0.0050\n", "Epoch 58/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0107 - val_loss: 0.0049\n", "Epoch 59/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0106 - val_loss: 0.0048\n", "Epoch 60/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0104 - val_loss: 0.0047\n", "Epoch 61/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0103 - val_loss: 0.0046\n", "Epoch 62/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0102 - val_loss: 0.0046\n", "Epoch 63/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0103 - val_loss: 0.0046\n", "Epoch 64/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0102 - val_loss: 0.0045\n", "Epoch 65/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0101 - val_loss: 0.0044\n", "Epoch 66/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0101 - val_loss: 0.0044\n", "Epoch 67/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0100 - val_loss: 0.0045\n", "Epoch 68/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0098 - val_loss: 0.0043\n", "Epoch 69/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0098 - val_loss: 0.0043\n", "Epoch 70/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0098 - val_loss: 0.0043\n", "Epoch 71/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0097 - val_loss: 0.0042\n", "Epoch 72/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0096 - val_loss: 0.0043\n", "Epoch 73/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0096 - val_loss: 0.0041\n", "Epoch 74/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0094 - val_loss: 0.0042\n", "Epoch 75/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0094 - val_loss: 0.0041\n", "Epoch 76/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0094 - val_loss: 0.0041\n", "Epoch 77/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0093 - val_loss: 0.0040\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 78/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0094 - val_loss: 0.0040\n", "Epoch 79/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0093 - val_loss: 0.0040\n", "Epoch 80/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0092 - val_loss: 0.0039\n", "Epoch 81/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0091 - val_loss: 0.0039\n", "Epoch 82/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0091 - val_loss: 0.0039\n", "Epoch 83/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0091 - val_loss: 0.0039\n", "Epoch 84/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0091 - val_loss: 0.0038\n", "Epoch 85/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0090 - val_loss: 0.0039\n", "Epoch 86/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0089 - val_loss: 0.0038\n", "Epoch 87/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0089 - val_loss: 0.0038\n", "Epoch 88/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0088 - val_loss: 0.0037\n", "Epoch 89/100\n", "29943/29943 [==============================] - 0s 4us/step - loss: 0.0088 - val_loss: 0.0037\n", "Epoch 90/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0087 - val_loss: 0.0037\n", "Epoch 91/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0087 - val_loss: 0.0037\n", "Epoch 92/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0086 - val_loss: 0.0036\n", "Epoch 93/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0087 - val_loss: 0.0037\n", "Epoch 94/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0086 - val_loss: 0.0036\n", "Epoch 95/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0084 - val_loss: 0.0036\n", "Epoch 96/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0086 - val_loss: 0.0036\n", "Epoch 97/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0085 - val_loss: 0.0036\n", "Epoch 98/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0085 - val_loss: 0.0035\n", "Epoch 99/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0085 - val_loss: 0.0035\n", "Epoch 100/100\n", "29943/29943 [==============================] - 0s 3us/step - loss: 0.0084 - val_loss: 0.0034\n" ] }, { "data": { "text/plain": [ "0.0589564154176633" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# model fit\n", "hist = nnetMdl.fit(varTran, tarTran, epochs=100, batch_size=1000, validation_split=0.1)\n", "tarTemp = nnetMdl.predict(varTest, batch_size=1000)\n", "#predict = tarScal.inverse_transform(tarTemp)\n", "#resRMSE = np.sqrt(mean_squared_error(tarTest, predict))\n", "resRMSE = np.sqrt(mean_squared_error(tarScal.transform(tarTest), tarTemp))\n", "resRMSE" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot history\n", "plt.plot(hist.history['loss'])\n", "plt.title('Model loss')\n", "plt.ylabel('Loss')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Val'], loc='upper right')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saved model to disk\n" ] }, { "data": { "text/plain": [ "['C:/Temp/WinProj/CTLEMdl/wsp/Rev_TarScaler.save']" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Separated Keras' architecture and synopse weight for later Cpp conversion\n", "from keras.models import model_from_json\n", "# serialize model to JSON\n", "nnetMdl_json = nnetMdl.to_json()\n", "with open(\"COM_nnetMdl_Rev.json\", \"w\") as json_file:\n", " json_file.write(nnetMdl_json)\n", "# serialize weights to HDF5\n", "nnetMdl.save_weights(\"COM_nnetMdl_W_Rev.h5\")\n", "\n", "# save model and architecture to single file\n", "nnetMdl.save(workDir + \"COM_nnetMdl_Rev.h5\")\n", "print(\"Saved model to disk\")\n", "\n", "# also save scaler\n", "from sklearn.externals import joblib\n", "joblib.dump(varScal, workDir + 'Rev_VarScaler.save') \n", "joblib.dump(tarScal, workDir + 'Rev_TarScaler.save') " ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "# generate prediction\n", "predict = tarScal.inverse_transform(tarTemp)\n", "allData = np.concatenate([varTest, tarTest, predict], axis = 1)\n", "allData.shape\n", "headLst = [varList, tarList, tarList]\n", "headStr = ''.join(str(e) + ',' for e in headLst)\n", "np.savetxt(workDir + 'COMCtleIOP_Rev.csv', allData, delimiter=',', header=headStr)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X9wXPV57/H3I1mCdRKsBMlx9INAM66nHuOCkd1M47lJ47g2IRiHJMakTMm98TV3CNDkNnLsCeN4VDo29r0XAgMNjsZT0vwwSi444iaMQt2kGdPQSMZENrQeDE2qHxBLJDbDSCDZeu4fu7JX611pVzrS2T3n85rxSOe7X62f79mzj7767jnPMXdHRESipSzsAEREJHhK7iIiEaTkLiISQUruIiIRpOQuIhJBSu4iIhE0aXI3s31mdtLMjuV43MzsATM7YWZdZrYs+DBFRKQQ+czc/x5YO8Hj1wILU/82A383/bBERGQ6Jk3u7v5z4HcTdLkB+JYnPQtUmdn7ggpQREQKNyeA56gDutO2e1Jtr070Q9XV1X755ZcH8N+LiMTH4cOHB9y9ZrJ+QSR3y9KWtaaBmW0muXTDZZddRmdnZwD/vYhIfJjZb/LpF8TZMj1AQ9p2PdCXraO773X3RndvrKmZ9BePiIhMURDJvQ34y9RZMx8ETrv7hEsyIiIysyZdljGz7wEfAarNrAf4GlAB4O7fAH4MfBw4AQwC/3WmghURkfxMmtzd/eZJHnfgC4FFJCIi06YrVEVEIkjJXUQkgpTcRUQiSMldRCSClNxFRCIoiCtUZYoOHOllT/tx+k4NUVuVoGnNItZfXRd2WIGI8thEChHWe0HJPSQHjvSy7fGjDI2cBaD31BDbHj8KUPJJMMpjEylEmO8FLcuEZE/78XMv+JihkbPsaT8eUkTBifLYRAoR5ntByT0kfaeGCmovJVEem0ghwnwvKLmHpLYqUVB7KYny2EQKEeZ7QWvuIWlas4hDTzzMF9lPrQ3Q59Xcz0ZWrrk97NCmLcpjEylEmO8FJfeQrC9/hk9UtDDn7FsA1NsAu8pbmFP+x8CGcIObpiiPTaQQYb4XtCwTloPN517wMXPOvgUHm0MKKEBRHptIIUJ8Lyi5h+V0T2HtpSTKYxMpRIjvBSX3sMyrL6y9lER5bCKFCPG9oOQellXboSLjE/OKRLK91EV5bDK7ulrhviWwoyr5tas17IgKE+J7QR+ohmVp6sOUg83JP9Hm1Sdf8KUR+MAxymOT2dPVCk/eBSOpc8JPdye3oXSOpRDfC5a8kdIknczWAl8HyoEWd9+V8fj7gX1ADfA74BZ3n3BRqbGx0Ts7O6cat4hE3X1Lkgk907wG+NKx2Y+nSJjZYXdvnKzfpMsyZlYOPARcCywGbjazxRnd/hfwLXdfCjQDOwsPWUTkPM/xoWOudhkvnzX3FcAJd3/F3YeB/cANGX0WAwdT3/80y+MiIgX5LdUFtct4+ST3OiD9b6OeVFu6XwGfSn3/SeBdZnZp5hOZ2WYz6zSzzv7+/qnEKyIxsXP4Mwx65bi2Qa9k5/BnQoqotOST3C1LW+ZC/ZeBD5vZEeDDQC9w5oIfct/r7o3u3lhTU1NwsCISH52XrGbryCZ6RqsZdaNntJqtI5vovGR12KGVhHzOlukBGtK264G+9A7u3gfcCGBm7wQ+5e6ngwpSROKnac0itj0+TNvwynNtiYpydq5ZFGJUpSOfmXsHsNDMrjCzSmAj0JbewcyqzWzsubaRPHNGRGTK1l9dx84br6SuKoEBdVUJdt54pW74kqdJZ+7ufsbM7gDaSZ4Kuc/dXzCzZqDT3duAjwA7zcyBnwNfmMGYRSQm1l9dp2Q+RXmd5z4TInmee1erLtwRkRmV73nuukI1KFG4mk5EIkO1ZYJysPl8Yh8zMqQytyISCiX3oKjMrYgUESX3oKjMrYgUESX3oKzazpnyi8c1nSm/WGVuRSQUSu4BOXD2Q1mvpjtw9kNhhyYiMaSzZQKyp/04vcN/yg/403Htv2g/rvN0RWTWaeYekL5TQwW1i4jMJCX3gNRWJQpqFxGZSUruAWlas4hERfm4tkRFOU0qciQiIdCae0DG1tX3tB+n79QQtVUJmtYs0nq7iIRCyT1AKnIkIsVCyzIiM62rNXmz5x1Vya9drWFHJDGgmbvITFJBOQmJZu4ynmaZwVJBOQmJZu5ynmaZwVNBOQlJXjN3M1trZsfN7ISZbc3y+GVm9lMzO2JmXWb28eBDlRmnWWbwVFBOQjJpcjezcuAh4FpgMXCzmS3O6HY30OruV5O8x+rDQQcqs0CzzOCpoJyEJJ+Z+wrghLu/4u7DwH7ghow+DlyS+n4e0BdciDJbBhMLCmqXyamgnIQlnzX3OqA7bbsH+JOMPjuAn5jZncA7gI8FEp3Mqt0jN7HFH2auDZ9rG/RKdo/cxI7wwippKignYcln5m5Z2jLvqn0z8PfuXg98HPgHM7vguc1ss5l1mllnf39/4dHKjHr0zRVZZ5mPvrki7NBKlgrKSVjymbn3AA1p2/VcuOzyeWAtgLv/wswuBqqBk+md3H0vsBegsbEx8xeEhKy2KkHbqZW0Da8c116n4mdTVluVoDdLIldBOZlp+czcO4CFZnaFmVWS/MC0LaPPfwKrAMzsj4CLAU3NS4yKnwVP+1TCMunM3d3PmNkdQDtQDuxz9xfMrBnodPc24K+Bb5rZl0gu2XzO3TUzLzEqfhY87VMJi4WVgxsbG72zszOU/1tEpFSZ2WF3b5ysn8oPiIhEkJK7iEgEKbmLiESQkruISAQpuYuIRJBK/sq0HDjSq9P8UgrdF9p3MpOU3GXKDhzpZdvjRxkaOQtA76khtj1+FCB2SerAkV4OPfEwj7Gf2osG6Bus5v4nNgK3Z90XhfYXKZSWZWTK9rQfP5fYxwyNnGVP+/GQIgrP8z/aS7Ptpb5sgDKD+rIBmm0vz/9obyD9RQql5C5T1ndqiHVlhzhUeRevXPRZDlXexbqyQ7EsirVp+NvjqmkCzLVhNg1/O5D+IoXSsoxM2a3v/CVbRlrOJal6G2BXRQvvqagErgs3uFlWW/b6jLaLFEozd5myLRWPZZ19bql4LKSIwvNWjhuaBNUuUigld5myuUOvFdQeZXOvbc56O72512a//2yh/UUKpeQuU6ebP5+3dANzbngQ5jUABvMakttLNwTTX6RAqgopU9fVCk/eBSNpH6BWJOD6B5SkRGaIqkLKzFu6IZnI02afSuwSeV2tcN8S2FGV/NrVGnZEWelsGZmepRuUzCU+Mv9aPd2d3Iaiex9o5i4ikq+DzeOXISG5fbD4PgjPa+ZuZmuBr5O8zV6Lu+/KePw+4M9Sm3OB+e5eFWSg+QqyXodqf4Qvjq9BR9sjNDy3h/nez0mroXtZE8vX3RZqTHF8HbI63VNYe4gmTe5mVg48BKwGeoAOM2tz9xfH+rj7l9L63wlcPQOxTirIWieq/RG+ONau6Wh7hCWH7yZhw2CwgH7mHb6bDggtwcfxdchlMLGAuUOvZm8PIZ6J5LMsswI44e6vuPswsB+4YYL+NwPfCyK4QgVZ60S1P8IXx9o1Dc/tSSb2NAkbpuG5PSFFFM/XIZfdIzcx6JXj2ga9kt0jN4UUUW75JPc6oDttuyfVdgEzez9wBfBPOR7fbGadZtbZ399faKyTylXTZCq1TlT7I3xxrF0z37O/L+b7wCxHcl6Q76tS9+ibK9g6some0WpG3egZrWbryCYefXNF2KFdIJ81d8vSluvk+I3AD9z9bLYH3X0vsBeS57nnFWEBaqsS9GY54GqrEoU/l2p/hC6OtWtOWg0LuDDBn7RqwipMUFuV4Jo3nmbLnFZqbYA+r2b3mQ0cvmR1SBGFp7YqQduplbQNrxzXXjeFHDPT8pm59wANadv1QF+OvhsJaUkGoGnNIhIV5ePaEhXlNK1ZVPBzqfZH+OJYu6Z7WRNDGX/2D3kl3cuaQooI7l/8EvdWtIxbory3ooX7F78UWkxhCTLHzLR8knsHsNDMrjCzSpIJvC2zk5ktAt4N/CLYEPO3/uo6vrX8Nzx78V/xykWf5dmL/4pvLf/NlD70Ue2P8MWxds3ydbdx7Jp7eI0aRt14jRqOXXNPqGfLLH/5wayfAyx/+cGQIgrP+qvr2HnjldRVJTCSM/adN15ZlB8sT7os4+5nzOwOoJ3kqZD73P0FM2sGOt19LNHfDOz3sOoZAHS1svzo14Chc2caLDj6Nbj83YVfYLB0Q3LnHGxOnuY0r545q7YX3YUKkTavPnmRSLb2CFu+7jZIJfMFqX+hKqHT/2bD+qvrijKZZ4pWbZn7luRIBg3wpWPB/l8y81S7pjjofVVU4llbRjOMaFHtmuKwanvyl2q6ikSyXYpWtGrLxPTP+EhT7Zrwje3/tCVKor5E2dVa8uONVnJftT37n/GaYYhMT5x+yZZQcbCJRGtZRn/Gi8h0lVBxsIlEa+YO8ZphiMg4gRQ4i8hnd9GauYtIbI0VOOs9NYRzvsDZgSO9BT3PYI4LFXO1FysldxGJhKAKnJVScbCJKLmLSCQEVWiulIqDTSR6a+4iEktBFZorpeJgE9HMXUQiIahCc6VUHGwimrmLSCQEVWhu7OyaUr+toJK7iERDgFeol0pxsIloWUZEokE1cMZRcheRaNAV6uNoWUYkbiJQFCsnXaF+jpK7SJxEpCiWTC6vZRkzW2tmx83shJltzdFng5m9aGYvmNl3gw1TJtTVmryhwo6q5Neu1rAjkmIVkaJYMrlJZ+5mVg48BKwmebPsDjNrc/cX0/osBLYBH3L335vZ/JkKWDJ0tXLmh3cy5+xbye3T3clt0ExMLlSkRbE62h6h4bk9zPd+TloN3cuaQr1vbBTkM3NfAZxw91fcfRjYD9yQ0ee/Aw+5++8B3P1ksGFKLoNPbT+f2FPmnH2LwafieYaATKwYi2J1tD3CksN3s4B+ylL3Pl5y+G462h4JLaYoyCe51wHpJ4/2pNrS/SHwh2b2jJk9a2ZrgwpQJnZxjgs0crVLvBVjUayG5/aQyLiyNGHDNDy3J6SIoiGf5G5Z2jLvqj0HWAh8BLgZaDGzqgueyGyzmXWaWWd/f3+hsUoWfaOXFtQu8VaMRbHme/ZcMN8HZjmSaMknufcADWnb9UBflj4/dPcRd/8P4DjJZD+Ou+9190Z3b6ypqZlqzJKmpfKWrDOxlspbQopIilltVYK20ZWsHH6AP3j7O6wcfoC20ZXUhlgU66RlzwUnrXqWI4mWfJJ7B7DQzK4ws0pgI9CW0ecA8GcAZlZNcpnmlSADleyuum4z233zuJnYdt/MVddtDjs0KULFWBSre1kTQxkTlCGvpHtZU0gRRcOkZ8u4+xkzuwNoB8qBfe7+gpk1A53u3pZ67M/N7EXgLNDk7q/PZOCSlKx/cTs3ta8q6SJHMjuKsSjW8nW30QGps2UGOGnVdF+js2Wmy9wzl89nR2Njo3d2dobyf4uIlCozO+zujZP1U20ZEZEIUnIXEYkgJXcRkQhSchcRiSBVhZRIOXCkt6jOBJHiEMfaNUruEhkHjvSy7fGjDI2cBaD31BDbHj8KoAQfY2O1axI2DKnaNfMO300HRDrBa1lGImNP+/FziX3M0MhZ9rQfDykiKQZxrV2jmbtERt+pIdaVHWLLnFZqbYA+r2b3mQ08eWpl2KFJiOZ7f9YKWVGvXaPkLpFx6zt/yZaRFuamZmn1NsCuihbeU1EJXBducBKak1bDAi4sTnbSqgmv0PHM07KMRMaWisfOJfYxc22YLRWPhRSRFIO41q5RcpfImJujhn2udomH5etu49g19/AaNYy68Ro1HLvmnkh/mApalpEomVefvOFztnaJteXrboNUMl+Q+hd1mrlLdKzaDhUZdckrEsl2kZhRcpfoWLoBrn8A5jUAlvx6/QO6UbjEkpZlJFqWblAyF0EzdxGRSMoruZvZWjM7bmYnzGxrlsc/Z2b9ZvZ86t+m4EOVSOtqhfuWwI6q5Neu1rAjEilpky7LmFk58BCwmuSNsDvMrM3dX8zo+pi73zEDMUpKZItidbVy5od3MufsW8nt093JbdASyyyK7PEVU/msua8ATrj7KwBmth+4AchM7jKDDhzp5dATD/MY+6m9aIC+wWruf2IjcHvJvwEHn9rO3LHEnjLn7FvJdiX3WRHl4yuu8lmWqQPSTx7uSbVl+pSZdZnZD8ysIZDo5Jznf7SXZttLfdkAZQb1ZQM0216e/9HesEObtotzXGSUq12CF+XjK67ySe5ZSu6QeVftJ4HL3X0p8I/Ao1mfyGyzmXWaWWd//4W1HiS3TcPfznpp/abhb4cUUXD6Ri8tqF2CF+XjK67ySe49QPpMvB7oS+/g7q+7+9upzW8C12R7Inff6+6N7t5YU1MzlXhjq7bs9YLaS0lL5S0MZtT+GPRKWipvCSmi+Iny8RVX+ST3DmChmV1hZpXARqAtvYOZvS9tcx3wb8GFKABvJbJfMJ2rvZRcdd1mtvtmekarGXWjZ7Sa7b6Zq67bHHZosRHl4yuuJv1A1d3PmNkdQDtQDuxz9xfMrBnodPc24C4zWwecAX4HfG4GY46ludc2jz+jBDhTfjFzr20OMapgJD+wu52b2lfpTI2QRPn4iitzz1w+nx2NjY3e2dkZyv9dsrpa4WAznO5JFsNatV2nCkpwdHyVBDM77O6Nk/ZTchcRKR35JneVHxARiSAl9ziayqX+Kg8gUlJUFTJuulrhybtgZCi5fbo7uQ2511en8jMiEirN3OPmYPP5JD1mZCjZHuTPiEioNHOPsKyFoE73ZO+cq32ixyb6GZEZ1NH2CA3P7WG+93PSauhe1hT5e6IWSsk9onIVgvrwRfN598hvL+g/mFjA3BzPNZhYwNyhVwv6GZGZ0tH2CEsO303ChsFgAf3MO3w3HaAEn0bLMhGVqxDUk0NLs17qv3vkppzPtXvkpoJ/RmSmNDy3J5nY0yRsmIbn9oQUUXFSco+oXIWgPlp2hK0jm8Zd6r91ZBOPvrki53M9+uaKgn9GZKbM9+xFB+f7wCxHUty0LBNROQtB2eu0ja6kbXjluPa6qkTu56pK0HaqsJ8RmSknrYYFXJjgT1o1qoRznmbuEZWr4NPpyvkkKsrHtSUqymlasyjnczWtWVTwz4jMlO5lTQxlLBMOeSXdy5pCiqg4KblH1NxrmzlTfvG4tjPlF/Pu6+9h541XUleVwEjOvnfeeOWERbrWX11X8M+IzJTl627j2DX38Bo1jLrxGjUcu+YefZiaQbVlokyFoEQiJ9/aMlpzj7KlG5TMRWJKyzIiIhGk5C7xpoJoElFalpH4mqwgmj6zmDrtu9DlNXM3s7VmdtzMTpjZ1gn6fdrM3MwmXeyPFc0Oi9NEBdHGEv/pbsDPJ369dpPTvisKk87czawceAhYDfQAHWbW5u4vZvR7F3AX8K8zEWjJ6modf2/K093JbYjlTCZrMbOwTqmcqCDaBIm/49e/L6qiVUVXRGuiX5oxPObDks/MfQVwwt1fcfdhYD9wQ5Z+fwPsBt7K8lhsDT61fdxNhwHmnH2Lwae2hxRReA4c6WXb40fpPTWEA72nhtj2+FEOHOkNJZ7BHBd6DSYW4DkSv5/uZsnhu1lAP2WpolVLDt9NR9sjMxlqTmNFtIolHmCCfacqorMpn+ReB3Snbfek2s4xs6uBBnf/fwHGFgkXD71WUHuU7Wk/zuqz/8yhyrt45aLPcqjyLlaf/Wf2tB8PJZ6JCqL9luqsP3PWy4qqaFUxFtHKte9ytcvMyCe5W5a2c1c+mVkZcB/w15M+kdlmM+s0s87+/uzFf6Kmb/TSgtqjrPGNp9lV0TKuUuWuihYa33g6lHgmKoi2c/gzWRN/OaNZnyusolXFWEQr177bOfyZkCKKp3ySew/QkLZdD/Slbb8LWAL8zMx+DXwQaMv2oaq773X3RndvrKmpmXrUJaSl8pasB3pL5S0hRRSebZXfz1qpclvl90OJp7YqQdvoSlYOP8AfvP0dVg4/QNvoSmqrEnResjpr4u/LMfs8aeHMSk9a9vdRWPEAOfdd5yWrQ4spjvI5FbIDWGhmVwC9wEbgs2MPuvtpOH/Em9nPgC+7u2oLAFddt5ntT5zhi76fWnudPr+U+9nIyus2hx3arHsv2WeTudpnWtOaRWx7/ChDI2fPtaUXRNv2+PC4SpiJinJWvr+a63+za9xSyJBX0n1NUygVCbuXNTFv7MYVRRAPjO3XC/fdThWam1WTJnd3P2NmdwDtQDmwz91fMLNmoNPd22Y6yFKWPBPkdm5qX1UcZ4iEyObVp06Py9IegrHXYKKzdy58bC0dbe9MnZ0ywEmrpvua8M5OWb7uNjqgaOKB/ParzDwVDpPZk3nREEBFAq5/QKfIieQp38JhKj8gs2fphmQin9cAWPKrErvIjFD5AZldqlQpMis0cxcRiSAldxGRCIrNskxR1TQRmQIdw1KIWCT3sZomY+czj9U0AfTmkJKgY1gKFYtlmT3tx8ddqAIwNHI2tJomIoXSMSyFikVy7zs1VFC7SLHRMSyFikVyr61KFNQuUmxqqxKsKzs0rqLmurJDOoYlp1isuTetWcShJx7mi+yn1gbo8+pkfZc1t4cdmkhe7l/8EksOt5yrIVNvA9xb0cKxxZcDHw01NilOsZi5ry9/Jmup2fXlz4Qdmkhelr/8YNa67ctffjCkiKTYxSK5c7A5692QONgcUkAiBZroloAiWcQjueuNIaUuV+XMkCpqSvGLR3LXG0NK3artyQqa6SoSyXaRLOKR3PXGkFKnippSoFicLXPuDXCwObkUM68+mdj1xpBSooqaUoC8kruZrQW+TvJOTC3uvivj8f8BfAE4C7wJbHb3FwOOdXr0xhCRGJk0uZtZOfAQsJrkzbI7zKwtI3l/192/keq/Dvg/wNoZiFcEKLyIVhyLbsVxzGEqtv2dz8x9BXDC3V8BMLP9wA3AueTu7m+k9X8HEM69+yQWCi2iFceiW3Ecc5iKcX/n84FqHZB+V+OeVNs4ZvYFM3sZ2A3cFUx4IhcqtIhWHItuxXHMYSrG/Z1PcrcsbRfMzN39IXf/APAV4O6sT2S22cw6zayzv7+/sEhFUgotohXHoltxHHOYinF/55Pce4CGtO16oG+C/vuB9dkecPe97t7o7o01NTX5RymSptBCcHEsHBfHMYepGPd3Psm9A1hoZleYWSWwEWhL72BmC9M2rwNeCi5EkfGa1iwiUVE+ri1RUU7TmkU5+3+68l/GVVT8dOW/5OwfBYXuI5meYtzfk36g6u5nzOwOoJ3kqZD73P0FM2sGOt29DbjDzD4GjAC/B26dyaAl3sY+oMr3zIT15c/wiYqWc/WF6m2AXeUtzCn/YyCap8cWuo9keopxf5t7OCe2NDY2emdnZyj/t8TMfUvgdPeF7fMa4EvHZj8ekWkws8Pu3jhZv3iUH5Do6WpNJu0dVcmvXa25+8a1cFwh+0imr8j2dzzKD0i0dLXCk3fBSOpMhNPdyW3IfhXyvPocM/cIF44rdB/J9BTh/tbMXUrPwebzb6IxI0O56/PHsXBcoftIpqcI97eSu5SeQpdZ4lhRMa5LUWEpwv2tZRkpPVNZZolb4bg4LkWFqQj3d8km9yCL9BRbwZ9ii6forNo+fn0Tor/MUqhZ2kcq4JZShMdkSSb3IIv0FFvBn2KLpyipPv/kZmEfqYBbmiI8JkvyPPcP7fonrnnjabbMaaXWBujzanaf2cDhS1bzzNaPFvxcvVnqP9RVJQp+riAUWzwiuRR6rOrYDkakz3NvfONpdlW0UF82QJlBfdkAuypaaHzj6YKfq9gK/hRbPCK59J0aYl3ZoXFlHdaVHZrwGC6kv0xPSS7LbKv8PnMZHtc214bZVvl9YGdBz1Vblcj5V0AYii0ekVxufecv2TLSwlxLvhfrLTnJek9FJckSU9PrL9NTkjP39zJQUPtE7l/8Evdm/BVwb0UL9y8Op/ZZscUjksuWisfOJeoxc22YLRWPBdJfpqckk7vlOL0oV/tElr/8IImMAy5hwyx/+cEpxTZdxRaPSC5zh16b0XaZnpJM7oFecVhsFx8UWzwiueSaTAXVLtNSmsk9yCsOi+2AK7Z4RHIpdJJVjGUgiqzYV5BK8gNVILgrDqdy8UFX68ydz1qEF0OIZFXoud3Fdi54ERb7ClJJnuceuEKSdeYBAcnkG2Stkpn85SEiSSVa5z/f89yV3AtVogeEiGTYUQVky38GO07NdjR5C/QiJjNba2bHzeyEmW3N8vj/NLMXzazLzA6a2funEnRJ0AeeItEQ8c+3Jk3uZlYOPARcCywGbjazxRndjgCN7r4U+AGwO+hAi8VgYkFB7SJSnDo+cCdDXjmubcgr6fjAnSFFFKx8Zu4rgBPu/oq7DwP7gRvSO7j7T919MLX5LBCNX31Z7B65icGMA2LQK9k9clNIEYnIVHzxxYV8ZWQTPaPVjLrRM1rNV0Y28cUXF4YdWiDyOVumDkhfZO4B/mSC/p8Hnsr2gJltBjYDXHbZZXmGWFwefXMFvysbTpUHeJ0+v5TdZzbw5Nsr2BF2cCKSt75TQ/SykrbhlePaLSK1bvJJ7palLeunsGZ2C9AIfDjb4+6+F9gLyQ9U84yxqNRWJWg7deEBUVeVyPETIlKMaqsSWatU1kbkvZzPskwP0JC2XQ/0ZXYys48BXwXWufvbwYRXfJrWLCJRUT6uLVFRTtOaRSFFJCJTEfX3cj4z9w5goZldAfQCG4HPpncws6uBR4C17n4y8CiLyNhNBSJ5NxmRGIn6ezmv89zN7OPA/UA5sM/d/9bMmoFOd28zs38ErgReTf3If7r7uomes2TPcxcRCVG+57nnVX7A3X8M/DijbXva9x8rOEIREZkxpVk4TEREJqTkLiISQUruIiIRpOQuIhJBSu4iIhGk5C4iEkFK7iIiEaTkLiISQaHdicnM+oHfBPBU1cBAAM9TSjTmeNCY46HQMb/f3Wsm6xRacg+KmXXmcylulGjM8aAxx8NMjVnLMiIiEaTkLiISQVFI7nvDDiAEGnM8aMzxMCNjLvk1dxERuVAUZu4iIpKh6JO7me0+UANqAAADUklEQVQzs5Nmdiyt7T1m9rSZvZT6+u5Uu5nZA2Z2wsy6zGxZeJFPXY4xf8bMXjCzUTNrzOi/LTXm42a2ZvYjnr4cY95jZv+eei2fMLOqtMeiOua/SY33eTP7iZnVptoje2ynPfZlM3Mzq05tl/yYc7zGO8ysN/UaP5+6GdLYY8Ed1+5e1P+A/wIsA46lte0Gtqa+3wrcm/r+48BTJG/q/UHgX8OOP8Ax/xGwCPgZ0JjWvhj4FXARcAXwMlAe9hgCGvOfA3NS39+b9jpHecyXpH1/F/CN1PeRPbZT7Q1AO8lrX6qjMuYcr/EO4MtZ+gZ6XBf9zN3dfw78LqP5BuDR1PePAuvT2r/lSc8CVWb2vtmJNDjZxuzu/+bux7N0vwHY7+5vu/t/ACeAFbMQZqByjPkn7n4mtfksyZuzQ7TH/Eba5juAsQ/FIntsp9wHbOH8eCECY55gvNkEelwXfXLP4b3u/ipA6uv8VHsd0J3WryfVFmVxGfN/IzmLg4iP2cz+1sy6gb8Axm5nGdkxm9k6oNfdf5XxUGTHDNyRWmraN7asTMDjLdXknotlaYv66UCRH7OZfRU4A3xnrClLt8iM2d2/6u4NJMd7R6o5kmM2s7nAVzn/S2zcw1naSn7MwN8BHwCuAl4F/neqPdDxlmpy/+3Yn2eprydT7T0k1+7G1AN9sxzbbIv0mM3sVuATwF94amGSiI85zXeBT6W+j+qYP0ByfflXZvZrkuN6zswWENExu/tv3f2su48C3+T80kug4y3V5N4G3Jr6/lbgh2ntf5n6lP2DwOmx5ZsIawM2mtlFZnYFsBD4ZcgxBcLM1gJfAda5+2DaQ1Ee88K0zXXAv6e+j+Sx7e5H3X2+u1/u7peTTHDL3P01IjrmjM8NPgmMnUkT7HEd9qfJeXza/D2Sf7qMkHzhPw9cChwEXkp9fU+qrwEPkfyU+ShpZ5WU0r8cY/5k6vu3gd8C7Wn9v5oa83Hg2rDjD3DMJ0iuQT6f+veNGIz5/6be7F3Ak0Bdqm9kj+2Mx3/N+bNlSn7MOV7jf0iNp4tkQn9fWv/AjmtdoSoiEkGluiwjIiITUHIXEYkgJXcRkQhSchcRiSAldxGRCFJyFxGJICV3EZEIUnIXEYmg/w83nw3aKsQ5NQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot Gdc\n", "begIndx = 100\n", "endIndx = 150\n", "indxAry = np.arange(0, len(varTest), 1)\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,0][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,0][begIndx:endIndx])" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot P1\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,1][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,1][begIndx:endIndx])" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot P2\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,2][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,2][begIndx:endIndx])" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot Z1\n", "plt.scatter(indxAry[begIndx:endIndx], tarTest.iloc[:,3][begIndx:endIndx])\n", "plt.scatter(indxAry[begIndx:endIndx], predict[:,3][begIndx:endIndx])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It seems this \"reversed\" neural network also work reasonably well. We will further fine-tune later on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Deployment:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have trained model in Keras' .h5 format, we can translate this model into corresponding cpp codes using Keras2Cpp:\n", "\n", "![Keras2Cpp](https://github.com/SPISim/ML_CtleModeling/blob/master/assets/images/Keras2Cpp.png?raw=true) \n", "\n", "Its github repository is here:\n", "[Keras2Cpp](https://github.com/pplonski/keras2cpp)\n", "\n", "Resulting file can be compiled together with keras_model.cc, keras_model.h in our AMI library." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Conclusion:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this post/notebook, we explore the flow to create a neural network based model for CTLE's parameter prediction. Data science techniques have been used. The resulting Keras' model is then converted into C++ code for implementation in our IBIS-AMI library. With this performance based CTLE model, our user can run channel simulation before committing actual silicon design." ] } ], "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }