|
a |
|
b/src/Classification/final.ipynb |
|
|
1 |
{ |
|
|
2 |
"cells": [ |
|
|
3 |
{ |
|
|
4 |
"cell_type": "code", |
|
|
5 |
"execution_count": 1, |
|
|
6 |
"metadata": { |
|
|
7 |
"colab": { |
|
|
8 |
"base_uri": "https://localhost:8080/" |
|
|
9 |
}, |
|
|
10 |
"id": "tKmDuogCasff", |
|
|
11 |
"outputId": "dcf279b7-7186-4d59-b55f-369d1c6c45e4" |
|
|
12 |
}, |
|
|
13 |
"outputs": [ |
|
|
14 |
{ |
|
|
15 |
"name": "stdout", |
|
|
16 |
"output_type": "stream", |
|
|
17 |
"text": [ |
|
|
18 |
"Mounted at /content/drive\n" |
|
|
19 |
] |
|
|
20 |
} |
|
|
21 |
], |
|
|
22 |
"source": [ |
|
|
23 |
"\n", |
|
|
24 |
"from google.colab import drive\n", |
|
|
25 |
"\n", |
|
|
26 |
"# The following command will prompt a URL for you to click and obtain the\n", |
|
|
27 |
"# authorization code\n", |
|
|
28 |
"\n", |
|
|
29 |
"drive.mount(\"/content/drive\")" |
|
|
30 |
] |
|
|
31 |
}, |
|
|
32 |
{ |
|
|
33 |
"cell_type": "code", |
|
|
34 |
"execution_count": 2, |
|
|
35 |
"metadata": { |
|
|
36 |
"id": "y6vRDtIya46z" |
|
|
37 |
}, |
|
|
38 |
"outputs": [], |
|
|
39 |
"source": [ |
|
|
40 |
"data_path=\"/content/drive/My Drive/Colab Notebooks/data/\"" |
|
|
41 |
] |
|
|
42 |
}, |
|
|
43 |
{ |
|
|
44 |
"cell_type": "code", |
|
|
45 |
"execution_count": 3, |
|
|
46 |
"metadata": { |
|
|
47 |
"colab": { |
|
|
48 |
"base_uri": "https://localhost:8080/" |
|
|
49 |
}, |
|
|
50 |
"id": "f2fH_I1TbA8k", |
|
|
51 |
"outputId": "4ea2083e-071e-4221-f07e-7e56bc4fa475" |
|
|
52 |
}, |
|
|
53 |
"outputs": [ |
|
|
54 |
{ |
|
|
55 |
"name": "stdout", |
|
|
56 |
"output_type": "stream", |
|
|
57 |
"text": [ |
|
|
58 |
"100\n", |
|
|
59 |
"200\n", |
|
|
60 |
"300\n", |
|
|
61 |
"400\n", |
|
|
62 |
"500\n", |
|
|
63 |
"600\n", |
|
|
64 |
"700\n", |
|
|
65 |
"800\n", |
|
|
66 |
"900\n", |
|
|
67 |
"1000\n", |
|
|
68 |
"1100\n", |
|
|
69 |
"1200\n", |
|
|
70 |
"1300\n", |
|
|
71 |
"1400\n", |
|
|
72 |
"1500\n", |
|
|
73 |
"1600\n", |
|
|
74 |
"1700\n", |
|
|
75 |
"1800\n", |
|
|
76 |
"1900\n", |
|
|
77 |
"2000\n", |
|
|
78 |
"2100\n", |
|
|
79 |
"2200\n", |
|
|
80 |
"2300\n", |
|
|
81 |
"2400\n", |
|
|
82 |
"2500\n", |
|
|
83 |
"2600\n", |
|
|
84 |
"2700\n", |
|
|
85 |
"2800\n", |
|
|
86 |
"2900\n", |
|
|
87 |
"3000\n", |
|
|
88 |
"3100\n", |
|
|
89 |
"3200\n", |
|
|
90 |
"3300\n", |
|
|
91 |
"3400\n", |
|
|
92 |
"3500\n", |
|
|
93 |
"3600\n", |
|
|
94 |
"3700\n", |
|
|
95 |
"3800\n", |
|
|
96 |
"3900\n", |
|
|
97 |
"4000\n", |
|
|
98 |
"4100\n", |
|
|
99 |
"4200\n", |
|
|
100 |
"4300\n", |
|
|
101 |
"4400\n", |
|
|
102 |
"4500\n", |
|
|
103 |
"4600\n", |
|
|
104 |
"4700\n", |
|
|
105 |
"4800\n", |
|
|
106 |
"4900\n", |
|
|
107 |
"5000\n", |
|
|
108 |
"5100\n", |
|
|
109 |
"5200\n", |
|
|
110 |
"5300\n", |
|
|
111 |
"5400\n", |
|
|
112 |
"5500\n", |
|
|
113 |
"5600\n", |
|
|
114 |
"5700\n", |
|
|
115 |
"5800\n", |
|
|
116 |
"5900\n", |
|
|
117 |
"6000\n", |
|
|
118 |
"6100\n", |
|
|
119 |
"6200\n", |
|
|
120 |
"6300\n", |
|
|
121 |
"6400\n", |
|
|
122 |
"6500\n", |
|
|
123 |
"6600\n", |
|
|
124 |
"6700\n", |
|
|
125 |
"6800\n", |
|
|
126 |
"6900\n", |
|
|
127 |
"7000\n", |
|
|
128 |
"7100\n", |
|
|
129 |
"7200\n", |
|
|
130 |
"7300\n", |
|
|
131 |
"7400\n", |
|
|
132 |
"7500\n", |
|
|
133 |
"7600\n", |
|
|
134 |
"7700\n", |
|
|
135 |
"7800\n", |
|
|
136 |
"7900\n", |
|
|
137 |
"8000\n" |
|
|
138 |
] |
|
|
139 |
} |
|
|
140 |
], |
|
|
141 |
"source": [ |
|
|
142 |
"import json\n", |
|
|
143 |
"import os\n", |
|
|
144 |
"# import pandas as pd\n", |
|
|
145 |
"import numpy as np\n", |
|
|
146 |
"# df=pd.DataFrame()\n", |
|
|
147 |
"count=0\n", |
|
|
148 |
"dataset=[]\n", |
|
|
149 |
"labels=[]\n", |
|
|
150 |
"for folder in os.listdir(data_path):\n", |
|
|
151 |
" for filename in os.listdir(data_path+folder)[::]:\n", |
|
|
152 |
" with open(data_path+folder+\"/\"+filename) as f:\n", |
|
|
153 |
" data = json.load(f)\n", |
|
|
154 |
" if(int(data['label'])>0):\n", |
|
|
155 |
" # df=df.append(pd.json_normalize(data))\n", |
|
|
156 |
" li=[]\n", |
|
|
157 |
" for i in list(data['data'].keys()):\n", |
|
|
158 |
" npdata=np.array(data['data'][i])\n", |
|
|
159 |
" li.append(np.pad(npdata,(0,10000-len(npdata)),'constant')) #some windows smaller than 256000\n", |
|
|
160 |
" ar=np.array(li)\n", |
|
|
161 |
" dataset.append(ar)\n", |
|
|
162 |
" labels.append(int(data['label']))\n", |
|
|
163 |
" count+=1\n", |
|
|
164 |
" if(count%100==0):\n", |
|
|
165 |
" print(count)\n", |
|
|
166 |
"dataset1=np.array(dataset)" |
|
|
167 |
] |
|
|
168 |
}, |
|
|
169 |
{ |
|
|
170 |
"cell_type": "code", |
|
|
171 |
"execution_count": 4, |
|
|
172 |
"metadata": { |
|
|
173 |
"colab": { |
|
|
174 |
"base_uri": "https://localhost:8080/" |
|
|
175 |
}, |
|
|
176 |
"id": "56DTcvkHnVPr", |
|
|
177 |
"outputId": "e51751ab-9186-438c-d5d8-e68f7bfe247f" |
|
|
178 |
}, |
|
|
179 |
"outputs": [ |
|
|
180 |
{ |
|
|
181 |
"data": { |
|
|
182 |
"text/plain": [ |
|
|
183 |
"(1606, 23, 10000)" |
|
|
184 |
] |
|
|
185 |
}, |
|
|
186 |
"execution_count": 4, |
|
|
187 |
"metadata": {}, |
|
|
188 |
"output_type": "execute_result" |
|
|
189 |
} |
|
|
190 |
], |
|
|
191 |
"source": [ |
|
|
192 |
"dataset1.shape" |
|
|
193 |
] |
|
|
194 |
}, |
|
|
195 |
{ |
|
|
196 |
"cell_type": "code", |
|
|
197 |
"execution_count": 5, |
|
|
198 |
"metadata": { |
|
|
199 |
"colab": { |
|
|
200 |
"base_uri": "https://localhost:8080/" |
|
|
201 |
}, |
|
|
202 |
"id": "Fv6mlcGQnaAj", |
|
|
203 |
"outputId": "25fd2b22-5a04-4c8a-ceda-e00b1fbfa4a3" |
|
|
204 |
}, |
|
|
205 |
"outputs": [ |
|
|
206 |
{ |
|
|
207 |
"name": "stdout", |
|
|
208 |
"output_type": "stream", |
|
|
209 |
"text": [ |
|
|
210 |
"Collecting einops\n", |
|
|
211 |
" Downloading einops-0.3.2-py3-none-any.whl (25 kB)\n", |
|
|
212 |
"Installing collected packages: einops\n", |
|
|
213 |
"Successfully installed einops-0.3.2\n", |
|
|
214 |
"Requirement already satisfied: seaborn in /usr/local/lib/python3.7/dist-packages (0.11.2)\n", |
|
|
215 |
"Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.7/dist-packages (from seaborn) (1.19.5)\n", |
|
|
216 |
"Requirement already satisfied: matplotlib>=2.2 in /usr/local/lib/python3.7/dist-packages (from seaborn) (3.2.2)\n", |
|
|
217 |
"Requirement already satisfied: scipy>=1.0 in /usr/local/lib/python3.7/dist-packages (from seaborn) (1.4.1)\n", |
|
|
218 |
"Requirement already satisfied: pandas>=0.23 in /usr/local/lib/python3.7/dist-packages (from seaborn) (1.1.5)\n", |
|
|
219 |
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.2->seaborn) (1.3.2)\n", |
|
|
220 |
"Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.2->seaborn) (2.8.2)\n", |
|
|
221 |
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.2->seaborn) (3.0.6)\n", |
|
|
222 |
"Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.2->seaborn) (0.11.0)\n", |
|
|
223 |
"Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.23->seaborn) (2018.9)\n", |
|
|
224 |
"Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib>=2.2->seaborn) (1.15.0)\n", |
|
|
225 |
"Requirement already satisfied: prettytable in /usr/local/lib/python3.7/dist-packages (2.4.0)\n", |
|
|
226 |
"Requirement already satisfied: wcwidth in /usr/local/lib/python3.7/dist-packages (from prettytable) (0.2.5)\n", |
|
|
227 |
"Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from prettytable) (4.8.2)\n", |
|
|
228 |
"Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->prettytable) (3.6.0)\n", |
|
|
229 |
"Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->prettytable) (3.10.0.2)\n", |
|
|
230 |
"Requirement already satisfied: sklearn in /usr/local/lib/python3.7/dist-packages (0.0)\n", |
|
|
231 |
"Requirement already satisfied: scikit-learn in /usr/local/lib/python3.7/dist-packages (from sklearn) (1.0.1)\n", |
|
|
232 |
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->sklearn) (1.1.0)\n", |
|
|
233 |
"Requirement already satisfied: numpy>=1.14.6 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->sklearn) (1.19.5)\n", |
|
|
234 |
"Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->sklearn) (3.0.0)\n", |
|
|
235 |
"Requirement already satisfied: scipy>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->sklearn) (1.4.1)\n", |
|
|
236 |
"Collecting levenshtein\n", |
|
|
237 |
" Downloading Levenshtein-0.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (110 kB)\n", |
|
|
238 |
"\u001b[K |████████████████████████████████| 110 kB 11.7 MB/s \n", |
|
|
239 |
"\u001b[?25hCollecting rapidfuzz<1.9,>=1.8.2\n", |
|
|
240 |
" Downloading rapidfuzz-1.8.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (854 kB)\n", |
|
|
241 |
"\u001b[K |████████████████████████████████| 854 kB 42.4 MB/s \n", |
|
|
242 |
"\u001b[?25hInstalling collected packages: rapidfuzz, levenshtein\n", |
|
|
243 |
"Successfully installed levenshtein-0.16.0 rapidfuzz-1.8.3\n", |
|
|
244 |
"Requirement already satisfied: tensorflow in /usr/local/lib/python3.7/dist-packages (2.7.0)\n", |
|
|
245 |
"Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (3.3.0)\n", |
|
|
246 |
"Requirement already satisfied: protobuf>=3.9.2 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (3.17.3)\n", |
|
|
247 |
"Requirement already satisfied: absl-py>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (0.12.0)\n", |
|
|
248 |
"Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.21.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (0.22.0)\n", |
|
|
249 |
"Requirement already satisfied: astunparse>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.6.3)\n", |
|
|
250 |
"Requirement already satisfied: keras-preprocessing>=1.1.1 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.1.2)\n", |
|
|
251 |
"Requirement already satisfied: flatbuffers<3.0,>=1.12 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (2.0)\n", |
|
|
252 |
"Requirement already satisfied: wrapt>=1.11.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.13.3)\n", |
|
|
253 |
"Requirement already satisfied: six>=1.12.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.15.0)\n", |
|
|
254 |
"Requirement already satisfied: libclang>=9.0.1 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (12.0.0)\n", |
|
|
255 |
"Requirement already satisfied: numpy>=1.14.5 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.19.5)\n", |
|
|
256 |
"Requirement already satisfied: gast<0.5.0,>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (0.4.0)\n", |
|
|
257 |
"Requirement already satisfied: h5py>=2.9.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (3.1.0)\n", |
|
|
258 |
"Requirement already satisfied: google-pasta>=0.1.1 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (0.2.0)\n", |
|
|
259 |
"Requirement already satisfied: grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.42.0)\n", |
|
|
260 |
"Requirement already satisfied: tensorboard~=2.6 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (2.7.0)\n", |
|
|
261 |
"Requirement already satisfied: keras<2.8,>=2.7.0rc0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (2.7.0)\n", |
|
|
262 |
"Requirement already satisfied: wheel<1.0,>=0.32.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (0.37.0)\n", |
|
|
263 |
"Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (1.1.0)\n", |
|
|
264 |
"Requirement already satisfied: tensorflow-estimator<2.8,~=2.7.0rc0 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (2.7.0)\n", |
|
|
265 |
"Requirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.7/dist-packages (from tensorflow) (3.10.0.2)\n", |
|
|
266 |
"Requirement already satisfied: cached-property in /usr/local/lib/python3.7/dist-packages (from h5py>=2.9.0->tensorflow) (1.5.2)\n", |
|
|
267 |
"Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (0.6.1)\n", |
|
|
268 |
"Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (3.3.6)\n", |
|
|
269 |
"Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (1.8.0)\n", |
|
|
270 |
"Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (0.4.6)\n", |
|
|
271 |
"Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (1.0.1)\n", |
|
|
272 |
"Requirement already satisfied: setuptools>=41.0.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (57.4.0)\n", |
|
|
273 |
"Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (2.23.0)\n", |
|
|
274 |
"Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard~=2.6->tensorflow) (1.35.0)\n", |
|
|
275 |
"Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard~=2.6->tensorflow) (0.2.8)\n", |
|
|
276 |
"Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard~=2.6->tensorflow) (4.2.4)\n", |
|
|
277 |
"Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard~=2.6->tensorflow) (4.8)\n", |
|
|
278 |
"Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard~=2.6->tensorflow) (1.3.0)\n", |
|
|
279 |
"Requirement already satisfied: importlib-metadata>=4.4 in /usr/local/lib/python3.7/dist-packages (from markdown>=2.6.8->tensorboard~=2.6->tensorflow) (4.8.2)\n", |
|
|
280 |
"Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard~=2.6->tensorflow) (3.6.0)\n", |
|
|
281 |
"Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard~=2.6->tensorflow) (0.4.8)\n", |
|
|
282 |
"Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard~=2.6->tensorflow) (2.10)\n", |
|
|
283 |
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard~=2.6->tensorflow) (2021.10.8)\n", |
|
|
284 |
"Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard~=2.6->tensorflow) (3.0.4)\n", |
|
|
285 |
"Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard~=2.6->tensorflow) (1.24.3)\n", |
|
|
286 |
"Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard~=2.6->tensorflow) (3.1.1)\n" |
|
|
287 |
] |
|
|
288 |
} |
|
|
289 |
], |
|
|
290 |
"source": [ |
|
|
291 |
"#Required Imports\n", |
|
|
292 |
"%matplotlib inline\n", |
|
|
293 |
"!pip install einops\n", |
|
|
294 |
"!pip install seaborn\n", |
|
|
295 |
"!pip install prettytable\n", |
|
|
296 |
"!pip install sklearn\n", |
|
|
297 |
"!pip install levenshtein\n", |
|
|
298 |
"!pip install tensorflow\n", |
|
|
299 |
"import gc\n", |
|
|
300 |
"import os\n", |
|
|
301 |
"\n", |
|
|
302 |
"import numpy as np\n", |
|
|
303 |
"import pandas as pd\n", |
|
|
304 |
"import matplotlib.pyplot as plt\n", |
|
|
305 |
"import seaborn as sns\n", |
|
|
306 |
"\n", |
|
|
307 |
"from collections import Counter\n", |
|
|
308 |
"import itertools\n", |
|
|
309 |
"import random\n", |
|
|
310 |
"from prettytable import PrettyTable\n", |
|
|
311 |
"from IPython.display import Image\n", |
|
|
312 |
"\n", |
|
|
313 |
"from sklearn.preprocessing import LabelEncoder\n", |
|
|
314 |
"from sklearn.metrics.pairwise import euclidean_distances\n", |
|
|
315 |
"from Levenshtein import distance as levenshtein_distance\n", |
|
|
316 |
"\n", |
|
|
317 |
"from tensorflow.keras.models import Model\n", |
|
|
318 |
"from tensorflow.keras.regularizers import l2\n", |
|
|
319 |
"from tensorflow.keras.constraints import max_norm\n", |
|
|
320 |
"from tensorflow.keras.utils import to_categorical\n", |
|
|
321 |
"from tensorflow.keras.preprocessing.text import Tokenizer\n", |
|
|
322 |
"from tensorflow.keras.preprocessing.sequence import pad_sequences\n", |
|
|
323 |
"from tensorflow.keras.callbacks import EarlyStopping\n", |
|
|
324 |
"from tensorflow.keras.layers import Input, Dense, Dropout, Flatten, Activation\n", |
|
|
325 |
"from tensorflow.keras.layers import Conv1D, Add, MaxPooling1D, BatchNormalization\n", |
|
|
326 |
"from tensorflow.keras.layers import Embedding, Bidirectional, LSTM, GlobalMaxPooling1D\n" |
|
|
327 |
] |
|
|
328 |
}, |
|
|
329 |
{ |
|
|
330 |
"cell_type": "code", |
|
|
331 |
"execution_count": 6, |
|
|
332 |
"metadata": { |
|
|
333 |
"colab": { |
|
|
334 |
"base_uri": "https://localhost:8080/" |
|
|
335 |
}, |
|
|
336 |
"id": "qnnT89BzFIte", |
|
|
337 |
"outputId": "bfaea969-eca6-4cd1-875c-1d088cd5921e" |
|
|
338 |
}, |
|
|
339 |
"outputs": [ |
|
|
340 |
{ |
|
|
341 |
"name": "stdout", |
|
|
342 |
"output_type": "stream", |
|
|
343 |
"text": [ |
|
|
344 |
"(963, 23, 10000)\n", |
|
|
345 |
"(321, 23, 10000)\n", |
|
|
346 |
"(322, 23, 10000)\n", |
|
|
347 |
"963\n", |
|
|
348 |
"321\n", |
|
|
349 |
"322\n", |
|
|
350 |
"\n", |
|
|
351 |
"(963, 10)\n" |
|
|
352 |
] |
|
|
353 |
} |
|
|
354 |
], |
|
|
355 |
"source": [ |
|
|
356 |
"x_train=dataset1[:int(len(dataset1)*.6)]\n", |
|
|
357 |
"x_val=dataset1[int(len(dataset1)*.6):int(len(dataset1)*.8)]\n", |
|
|
358 |
"x_test=dataset1[int(len(dataset1)*.8):]\n", |
|
|
359 |
"#shape of data\n", |
|
|
360 |
"print(x_train.shape)\n", |
|
|
361 |
"print(x_val.shape)\n", |
|
|
362 |
"print(x_test.shape)\n", |
|
|
363 |
"y_train=labels[:int(len(labels)*.6)]\n", |
|
|
364 |
"y_val=labels[int(len(labels)*.6):int(len(labels)*.8)]\n", |
|
|
365 |
"y_test=labels[int(len(labels)*.8):]\n", |
|
|
366 |
"#shape of labels\n", |
|
|
367 |
"print(len(y_train))\n", |
|
|
368 |
"print(len(y_val))\n", |
|
|
369 |
"print(len(y_test))\n", |
|
|
370 |
"print(\"\")\n", |
|
|
371 |
"# One hot encoding of outputs\n", |
|
|
372 |
"y_train_orig=y_train\n", |
|
|
373 |
"y_val_orig=y_val\n", |
|
|
374 |
"y_test_orig=y_test\n", |
|
|
375 |
"\n", |
|
|
376 |
"from tensorflow.keras.utils import to_categorical\n", |
|
|
377 |
"y_train = to_categorical(y_train)\n", |
|
|
378 |
"y_val = to_categorical(y_val)\n", |
|
|
379 |
"y_test = to_categorical(y_test)\n", |
|
|
380 |
"print(y_train.shape)" |
|
|
381 |
] |
|
|
382 |
}, |
|
|
383 |
{ |
|
|
384 |
"cell_type": "code", |
|
|
385 |
"execution_count": 7, |
|
|
386 |
"metadata": { |
|
|
387 |
"id": "jr3KxEoYn2ES" |
|
|
388 |
}, |
|
|
389 |
"outputs": [], |
|
|
390 |
"source": [ |
|
|
391 |
"#Utility functions: plot model's accuracy and loss\n", |
|
|
392 |
"\n", |
|
|
393 |
"# https://realpython.com/python-keras-text-classification/\n", |
|
|
394 |
"import matplotlib.pyplot as plt\n", |
|
|
395 |
"plt.style.use('ggplot')\n", |
|
|
396 |
"\n", |
|
|
397 |
"def plot_history(history):\n", |
|
|
398 |
" acc = history.history['rmse']\n", |
|
|
399 |
" val_acc = history.history['val_rmse']\n", |
|
|
400 |
" loss = history.history['loss']\n", |
|
|
401 |
" val_loss = history.history['val_loss']\n", |
|
|
402 |
" x = range(1, len(acc) + 1)\n", |
|
|
403 |
"\n", |
|
|
404 |
" plt.figure(figsize=(12, 5))\n", |
|
|
405 |
" plt.subplot(1, 2, 1)\n", |
|
|
406 |
" plt.plot(x, acc, 'b', label='Training acc')\n", |
|
|
407 |
" plt.plot(x, val_acc, 'r', label='Validation acc')\n", |
|
|
408 |
" plt.title('Training and validation accuracy')\n", |
|
|
409 |
" plt.legend()\n", |
|
|
410 |
"\n", |
|
|
411 |
" plt.subplot(1, 2, 2)\n", |
|
|
412 |
" plt.plot(x, loss, 'b', label='Training loss')\n", |
|
|
413 |
" plt.plot(x, val_loss, 'r', label='Validation loss')\n", |
|
|
414 |
" plt.title('Training and validation loss')\n", |
|
|
415 |
" plt.legend()\n", |
|
|
416 |
"\n", |
|
|
417 |
"# Utility function: Display model score(Loss & Accuracy) across all sets.\n", |
|
|
418 |
"\n", |
|
|
419 |
"def display_model_score(model, train, val, test, batch_size):\n", |
|
|
420 |
"\n", |
|
|
421 |
" train_score = model.evaluate(train[0], train[1], batch_size=batch_size, verbose=1)\n", |
|
|
422 |
" print('Train loss: ', train_score[0])\n", |
|
|
423 |
" print('Train accuracy: ', train_score[1])\n", |
|
|
424 |
" print('-'*70)\n", |
|
|
425 |
"\n", |
|
|
426 |
" val_score = model.evaluate(val[0], val[1], batch_size=batch_size, verbose=1)\n", |
|
|
427 |
" print('Val loss: ', val_score[0])\n", |
|
|
428 |
" print('Val accuracy: ', val_score[1])\n", |
|
|
429 |
" print('-'*70)\n", |
|
|
430 |
" \n", |
|
|
431 |
" test_score = model.evaluate(test[0], test[1], batch_size=batch_size, verbose=1)\n", |
|
|
432 |
" print('Test loss: ', test_score[0])\n", |
|
|
433 |
" print('Test accuracy: ', test_score[1])" |
|
|
434 |
] |
|
|
435 |
}, |
|
|
436 |
{ |
|
|
437 |
"cell_type": "code", |
|
|
438 |
"execution_count": 8, |
|
|
439 |
"metadata": { |
|
|
440 |
"id": "eFE2yy9xn5HV" |
|
|
441 |
}, |
|
|
442 |
"outputs": [], |
|
|
443 |
"source": [ |
|
|
444 |
"# Evaluation function\n", |
|
|
445 |
"def evaluate_model(history,X_test,y_test,model):\n", |
|
|
446 |
" scores = model.evaluate((X_test),y_test, verbose=0)\n", |
|
|
447 |
" print(\"Accuracy: %.2f%%\" % (scores[1]*100))\n", |
|
|
448 |
" \n", |
|
|
449 |
" print(history)\n", |
|
|
450 |
" fig1, ax_acc = plt.subplots()\n", |
|
|
451 |
" plt.plot(history.history['accuracy'])\n", |
|
|
452 |
" plt.plot(history.history['val_accuracy'])\n", |
|
|
453 |
" plt.xlabel('Epoch')\n", |
|
|
454 |
" plt.ylabel('Accuracy')\n", |
|
|
455 |
" plt.title('Model - Accuracy')\n", |
|
|
456 |
" plt.legend(['Training', 'Validation'], loc='lower right')\n", |
|
|
457 |
" plt.show()\n", |
|
|
458 |
" \n", |
|
|
459 |
" fig2, ax_loss = plt.subplots()\n", |
|
|
460 |
" plt.xlabel('Epoch')\n", |
|
|
461 |
" plt.ylabel('Loss')\n", |
|
|
462 |
" plt.title('Model- Loss')\n", |
|
|
463 |
" plt.legend(['Training', 'Validation'], loc='upper right')\n", |
|
|
464 |
" plt.plot(history.history['loss'])\n", |
|
|
465 |
" plt.plot(history.history['val_loss'])\n", |
|
|
466 |
" plt.show()\n", |
|
|
467 |
" target_names=['1','2','3']\n", |
|
|
468 |
" \n", |
|
|
469 |
" y_true=[]\n", |
|
|
470 |
" for element in y_test:\n", |
|
|
471 |
" y_true.append(np.argmax(element))\n", |
|
|
472 |
" prediction_proba=model.predict(X_test)\n", |
|
|
473 |
" prediction=np.argmax(prediction_proba,axis=1)\n", |
|
|
474 |
" cnf_matrix = confusion_matrix(y_true, prediction)\n", |
|
|
475 |
" " |
|
|
476 |
] |
|
|
477 |
}, |
|
|
478 |
{ |
|
|
479 |
"cell_type": "code", |
|
|
480 |
"execution_count": 9, |
|
|
481 |
"metadata": { |
|
|
482 |
"id": "buRxuSBWFcva" |
|
|
483 |
}, |
|
|
484 |
"outputs": [], |
|
|
485 |
"source": [ |
|
|
486 |
"from tensorflow import keras\n", |
|
|
487 |
"import tensorflow as tf\n", |
|
|
488 |
"\n", |
|
|
489 |
"#CNN:\n", |
|
|
490 |
"\n", |
|
|
491 |
"def network_CNN(X_train,y_train):\n", |
|
|
492 |
" \n", |
|
|
493 |
" im_shape = (23,10000)\n", |
|
|
494 |
" inputs_cnn=Input(shape=im_shape, name='inputs_cnn')\n", |
|
|
495 |
"\n", |
|
|
496 |
" #Convolution layer calcuations are based on: O = W-F+2P/S + 1\n", |
|
|
497 |
" \n", |
|
|
498 |
" #first convolution layer with filters=128, kernel_size=1\n", |
|
|
499 |
" conv1d_1 = tf.keras.layers.Conv1D(\n", |
|
|
500 |
" 128, 1, strides=1,padding=\"valid\",dilation_rate=1, activation='relu',input_shape=im_shape)(inputs_cnn)\n", |
|
|
501 |
" \n", |
|
|
502 |
" #batch normalization layer \n", |
|
|
503 |
" batch_normalization = tf.keras.layers.BatchNormalization()(conv1d_1)\n", |
|
|
504 |
"\n", |
|
|
505 |
" #max pooling layer with pool_size=2, strides=2\n", |
|
|
506 |
" max_pooling1d = tf.keras.layers.MaxPooling1D(pool_size=2, strides=2)(batch_normalization)\n", |
|
|
507 |
"\n", |
|
|
508 |
" #flatten to lower dimension\n", |
|
|
509 |
" flatten = Flatten()(max_pooling1d)\n", |
|
|
510 |
"\n", |
|
|
511 |
" #two dense layers\n", |
|
|
512 |
" dense = Dense(64, activation='relu')(flatten)\n", |
|
|
513 |
" dense_1 = Dense(32, activation='relu')(dense)\n", |
|
|
514 |
"\n", |
|
|
515 |
" #output with a softmax activation fxn to catagorize data\n", |
|
|
516 |
" main_output = Dense(10, activation='softmax')(dense_1)\n", |
|
|
517 |
"\n", |
|
|
518 |
" \n", |
|
|
519 |
" model = Model(inputs= inputs_cnn, outputs=main_output)\n", |
|
|
520 |
" model.compile(optimizer='adam', loss='categorical_crossentropy',metrics = ['accuracy'])\n", |
|
|
521 |
"\n", |
|
|
522 |
" return(model)" |
|
|
523 |
] |
|
|
524 |
}, |
|
|
525 |
{ |
|
|
526 |
"cell_type": "code", |
|
|
527 |
"execution_count": 10, |
|
|
528 |
"metadata": { |
|
|
529 |
"colab": { |
|
|
530 |
"base_uri": "https://localhost:8080/" |
|
|
531 |
}, |
|
|
532 |
"id": "aQ0S9u2UIiGl", |
|
|
533 |
"outputId": "4b006dfc-b795-4a81-9ad4-b401530d0235" |
|
|
534 |
}, |
|
|
535 |
"outputs": [ |
|
|
536 |
{ |
|
|
537 |
"name": "stdout", |
|
|
538 |
"output_type": "stream", |
|
|
539 |
"text": [ |
|
|
540 |
"Model: \"model\"\n", |
|
|
541 |
"_________________________________________________________________\n", |
|
|
542 |
" Layer (type) Output Shape Param # \n", |
|
|
543 |
"=================================================================\n", |
|
|
544 |
" inputs_cnn (InputLayer) [(None, 23, 10000)] 0 \n", |
|
|
545 |
" \n", |
|
|
546 |
" conv1d (Conv1D) (None, 23, 128) 1280128 \n", |
|
|
547 |
" \n", |
|
|
548 |
" batch_normalization (BatchN (None, 23, 128) 512 \n", |
|
|
549 |
" ormalization) \n", |
|
|
550 |
" \n", |
|
|
551 |
" max_pooling1d (MaxPooling1D (None, 11, 128) 0 \n", |
|
|
552 |
" ) \n", |
|
|
553 |
" \n", |
|
|
554 |
" flatten (Flatten) (None, 1408) 0 \n", |
|
|
555 |
" \n", |
|
|
556 |
" dense (Dense) (None, 64) 90176 \n", |
|
|
557 |
" \n", |
|
|
558 |
" dense_1 (Dense) (None, 32) 2080 \n", |
|
|
559 |
" \n", |
|
|
560 |
" dense_2 (Dense) (None, 10) 330 \n", |
|
|
561 |
" \n", |
|
|
562 |
"=================================================================\n", |
|
|
563 |
"Total params: 1,373,226\n", |
|
|
564 |
"Trainable params: 1,372,970\n", |
|
|
565 |
"Non-trainable params: 256\n", |
|
|
566 |
"_________________________________________________________________\n", |
|
|
567 |
"None\n" |
|
|
568 |
] |
|
|
569 |
} |
|
|
570 |
], |
|
|
571 |
"source": [ |
|
|
572 |
"\n", |
|
|
573 |
"model = network_CNN(x_train,y_train)\n", |
|
|
574 |
"print(model.summary())" |
|
|
575 |
] |
|
|
576 |
}, |
|
|
577 |
{ |
|
|
578 |
"cell_type": "code", |
|
|
579 |
"execution_count": 11, |
|
|
580 |
"metadata": { |
|
|
581 |
"colab": { |
|
|
582 |
"base_uri": "https://localhost:8080/" |
|
|
583 |
}, |
|
|
584 |
"id": "HOTU7HTZIil9", |
|
|
585 |
"outputId": "3659259d-f74b-42b0-c264-1f48910e8597" |
|
|
586 |
}, |
|
|
587 |
"outputs": [ |
|
|
588 |
{ |
|
|
589 |
"name": "stdout", |
|
|
590 |
"output_type": "stream", |
|
|
591 |
"text": [ |
|
|
592 |
"Epoch 1/20\n", |
|
|
593 |
"31/31 [==============================] - 15s 102ms/step - loss: 2.0422 - accuracy: 0.3614 - val_loss: 1.8298 - val_accuracy: 0.3801\n", |
|
|
594 |
"Epoch 2/20\n", |
|
|
595 |
"31/31 [==============================] - 1s 39ms/step - loss: 1.1581 - accuracy: 0.6116 - val_loss: 1.2448 - val_accuracy: 0.6822\n", |
|
|
596 |
"Epoch 3/20\n", |
|
|
597 |
"31/31 [==============================] - 1s 39ms/step - loss: 0.8890 - accuracy: 0.7134 - val_loss: 0.9812 - val_accuracy: 0.7508\n", |
|
|
598 |
"Epoch 4/20\n", |
|
|
599 |
"31/31 [==============================] - 1s 39ms/step - loss: 0.6273 - accuracy: 0.7985 - val_loss: 0.7635 - val_accuracy: 0.8131\n", |
|
|
600 |
"Epoch 5/20\n", |
|
|
601 |
"31/31 [==============================] - 1s 45ms/step - loss: 0.6679 - accuracy: 0.7840 - val_loss: 0.7325 - val_accuracy: 0.8193\n", |
|
|
602 |
"Epoch 6/20\n", |
|
|
603 |
"31/31 [==============================] - 1s 47ms/step - loss: 0.4229 - accuracy: 0.8525 - val_loss: 0.5350 - val_accuracy: 0.8629\n", |
|
|
604 |
"Epoch 7/20\n", |
|
|
605 |
"31/31 [==============================] - 1s 44ms/step - loss: 0.3490 - accuracy: 0.8816 - val_loss: 0.5125 - val_accuracy: 0.8910\n", |
|
|
606 |
"Epoch 8/20\n", |
|
|
607 |
"31/31 [==============================] - 1s 42ms/step - loss: 0.3707 - accuracy: 0.8920 - val_loss: 0.4874 - val_accuracy: 0.8847\n", |
|
|
608 |
"Epoch 9/20\n", |
|
|
609 |
"31/31 [==============================] - 1s 41ms/step - loss: 0.3646 - accuracy: 0.8868 - val_loss: 0.4581 - val_accuracy: 0.8847\n", |
|
|
610 |
"Epoch 10/20\n", |
|
|
611 |
"31/31 [==============================] - 1s 41ms/step - loss: 0.2728 - accuracy: 0.9076 - val_loss: 0.4356 - val_accuracy: 0.8816\n", |
|
|
612 |
"Epoch 11/20\n", |
|
|
613 |
"31/31 [==============================] - 1s 40ms/step - loss: 0.2324 - accuracy: 0.9294 - val_loss: 0.3382 - val_accuracy: 0.9283\n", |
|
|
614 |
"Epoch 12/20\n", |
|
|
615 |
"31/31 [==============================] - 1s 38ms/step - loss: 0.1514 - accuracy: 0.9637 - val_loss: 0.2944 - val_accuracy: 0.9377\n", |
|
|
616 |
"Epoch 13/20\n", |
|
|
617 |
"31/31 [==============================] - 1s 42ms/step - loss: 0.2261 - accuracy: 0.9263 - val_loss: 0.3570 - val_accuracy: 0.9097\n", |
|
|
618 |
"Epoch 14/20\n", |
|
|
619 |
"31/31 [==============================] - 1s 40ms/step - loss: 0.1873 - accuracy: 0.9418 - val_loss: 0.3106 - val_accuracy: 0.9283\n", |
|
|
620 |
"Epoch 15/20\n", |
|
|
621 |
"31/31 [==============================] - 1s 40ms/step - loss: 0.2205 - accuracy: 0.9315 - val_loss: 0.3274 - val_accuracy: 0.8972\n", |
|
|
622 |
"Epoch 00015: early stopping\n" |
|
|
623 |
] |
|
|
624 |
} |
|
|
625 |
], |
|
|
626 |
"source": [ |
|
|
627 |
"# Train you model\n", |
|
|
628 |
"\n", |
|
|
629 |
"es = EarlyStopping(monitor='val_loss',patience=3, verbose=1)\n", |
|
|
630 |
"\n", |
|
|
631 |
"history = model.fit(x_train, y_train,epochs=20, batch_size=32,validation_data=(x_val,y_val), callbacks=[es])" |
|
|
632 |
] |
|
|
633 |
}, |
|
|
634 |
{ |
|
|
635 |
"cell_type": "code", |
|
|
636 |
"execution_count": 12, |
|
|
637 |
"metadata": { |
|
|
638 |
"colab": { |
|
|
639 |
"base_uri": "https://localhost:8080/", |
|
|
640 |
"height": 616 |
|
|
641 |
}, |
|
|
642 |
"id": "taEMwdHOImY0", |
|
|
643 |
"outputId": "10a6e3cf-daec-4f6a-b062-097ab6d93490" |
|
|
644 |
}, |
|
|
645 |
"outputs": [ |
|
|
646 |
{ |
|
|
647 |
"name": "stdout", |
|
|
648 |
"output_type": "stream", |
|
|
649 |
"text": [ |
|
|
650 |
"Accuracy: 91.93%\n", |
|
|
651 |
"<keras.callbacks.History object at 0x7facc06e6290>\n" |
|
|
652 |
] |
|
|
653 |
}, |
|
|
654 |
{ |
|
|
655 |
"data": { |
|
|
656 |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEaCAYAAAD+E0veAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXxTVf7/8ddN0jbd26TQUihbS1kFLEUQlMVWRRHFFb8qLuA+P2SY0UFmcPuqX1FHZxx1FBRBHZxBRwUVUSmIKFVAVoHSUvaltE0XuqVLcs/vj0Cg0EJa2rShn+fj4YMmOffedyLk03vPPedoSimFEEIIARhaOoAQQojWQ4qCEEIINykKQggh3KQoCCGEcJOiIIQQwk2KghBCCDcpCuK8Mn/+fEwmU4O2efrpp0lISGimREL4FikKwivuvvtuNE3jhhtuOO21xYsXo2lag7/MW7OFCxdiNBq5+eabWzqKEA0iRUF4TefOnfnqq6/Izc2t9fzs2bPp0qVLC6VqHrNnz2b69Ol89dVX5OXltXQcdF3H6XS2dAzhA6QoCK/p0aMHQ4cOZf78+e7n9u/fz7Jly7jnnntOa//1118zaNAgAgICaN++PQ8//DDl5eXu13Vd54knnqB9+/aEhIQwYcIEioqKTtvPsmXLGD58OIGBgXTs2JF77rmHgoKCZnmPADt37iQ9PZ0//vGPjBo1innz5p3WZv369YwZM4awsDBCQkK46KKLWLNmjfv1tLQ0Lr30UoKCgggPD2fkyJHs2rULcJ11paam1trfv/71LzRNcz8+fkls4cKF9OrVC39/f7KystiwYQNXXXWV+zMbPHgw33zzTa19ORwOnnnmGeLj4wkICKBjx45MmTLFfewrrrjitPdz2WWXMXny5MZ/aKLVkKIgvOr+++/n3Xff5fjsKu+++y4pKSmnnSls2bKFa6+9lhEjRrB582bef/99vvrqKx588EF3m9dff51XX32Vl19+mQ0bNjBo0CCeeeaZWvtZsWIF1113Hbfeeitbtmxh0aJF7N27lxtuuIHmmuFlzpw5jB07FqvVyt13380777xT61jbtm1jxIgRREZGsmLFCjZu3Mi0adPQdR1wFYQrr7ySQYMG8fPPP7NmzRruvPNOampqGpTj8OHD/POf/+T9999n+/btdOrUiZKSEiZMmMD333/Phg0buPLKK7n22mvJyspybzd58mTefPNNnn76abZv386nn35K9+7dAXjggQdIS0tjz5497vbZ2dmsXLmS+++//1w+NtFaKCG84K677lIpKSnKbrcri8WiVqxYoRwOh+rYsaP69NNP1bx585TRaHS3v+OOO9TgwYNr7WPRokVK0zS1d+9epZRSHTt2VH/+859rtbnxxhtr7WfkyJFq+vTptdrs27dPAWrjxo1KKaWeeuopFR8f3yTvs6qqSrVr10598cUXSiml7Ha7Cg8PV8uWLav13vr376+cTmed+7jkkkvU2LFj6z3G8c/yZB9++KE6+Z/zU089pTRNU/v27Ttr5v79+6vnnntOKaXUzp07FaA++eSTettfcMEF6i9/+Yv78eOPP6769+9/1uMI3yBnCsKrzGYzEydO5J133mHJkiU4HA7GjRt3Wrvjv02fbOTIkSil2L59OyUlJRw6dIhhw4bVanPJJZfUerxu3Tr+/ve/ExIS4v6vT58+gOsyjycWLFhQa/sFCxbU2/bzzz/HYDBw1VVXud/vhAkTmD17trvN+vXrSUlJwWCo+5/f+vXr67xE01DR0dF07ty51nP5+fk8/PDD9OrVi4iICEJCQti2bRv79u0DYMOGDQBnPP4DDzzAvHnzcDqdOBwO5s+fz3333XfOeUXrcP7c7iF8xv33309SUhIHDhzgnnvuwc/Pr9mOpes606dPZ+LEiae9FhMT49E+rr32WoYMGeJ+HB0dXW/b2bNnk5eXh9lsdj+nlMJoNJKXl0f79u0bkL5uBoPhtEtfdV1aCg4OPu25u+++m/379/PSSy/RrVs3AgMDufXWW6murvb4+BMnTmT69OksWbIEXdc5evQod9xxR8PfiGiVpCgIr+vTpw+DBw9m9erVtTqdT9a3b19WrVpV67kffvgBTdPo27cvYWFhdOzYkfT0dMaOHetus3r16lrbJCcns23btnMahxAaGkpoaOhZ2+3cuZOVK1fy2WefnXa866+/nnnz5jF9+nQGDRrE8uXL0XW9zrOFQYMG8d133/HII4/UeZz27dvz888/13ru+G/4Z7Nq1Speeuklrr32WgDKy8vZvXs3/fr1AyApKQmA7777jptuuqnOfYSFhXHrrbfyzjvvoOs6N998MxERER4dX/iAFr58JdqIU6+Dl5eXq4KCAvfjU/sUNm/e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\n", |
|
|
657 |
"text/plain": [ |
|
|
658 |
"<Figure size 432x288 with 1 Axes>" |
|
|
659 |
] |
|
|
660 |
}, |
|
|
661 |
"metadata": {}, |
|
|
662 |
"output_type": "display_data" |
|
|
663 |
}, |
|
|
664 |
{ |
|
|
665 |
"data": { |
|
|
666 |
"image/png": "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\n", |
|
|
667 |
"text/plain": [ |
|
|
668 |
"<Figure size 432x288 with 1 Axes>" |
|
|
669 |
] |
|
|
670 |
}, |
|
|
671 |
"metadata": {}, |
|
|
672 |
"output_type": "display_data" |
|
|
673 |
} |
|
|
674 |
], |
|
|
675 |
"source": [ |
|
|
676 |
"# Print result and plot accuracy and loss\n", |
|
|
677 |
"\n", |
|
|
678 |
"from sklearn.metrics import confusion_matrix\n", |
|
|
679 |
"\n", |
|
|
680 |
"evaluate_model(history,x_test,y_test,model)" |
|
|
681 |
] |
|
|
682 |
}, |
|
|
683 |
{ |
|
|
684 |
"cell_type": "code", |
|
|
685 |
"execution_count": 13, |
|
|
686 |
"metadata": { |
|
|
687 |
"colab": { |
|
|
688 |
"base_uri": "https://localhost:8080/" |
|
|
689 |
}, |
|
|
690 |
"id": "RkcyMx8G78U6", |
|
|
691 |
"outputId": "b1a0c9a7-f14c-4da2-a25f-b78203058430" |
|
|
692 |
}, |
|
|
693 |
"outputs": [ |
|
|
694 |
{ |
|
|
695 |
"name": "stdout", |
|
|
696 |
"output_type": "stream", |
|
|
697 |
"text": [ |
|
|
698 |
"Accuracy of cnn model: 91.93%\n" |
|
|
699 |
] |
|
|
700 |
} |
|
|
701 |
], |
|
|
702 |
"source": [ |
|
|
703 |
"# eval metric : \n", |
|
|
704 |
"scores = model.evaluate((x_test),y_test, verbose=0)\n", |
|
|
705 |
"cnn_acc = \"Accuracy of cnn model: %.2f%%\" % (scores[1]*100)\n", |
|
|
706 |
"print(cnn_acc)" |
|
|
707 |
] |
|
|
708 |
}, |
|
|
709 |
{ |
|
|
710 |
"cell_type": "code", |
|
|
711 |
"execution_count": 47, |
|
|
712 |
"metadata": { |
|
|
713 |
"colab": { |
|
|
714 |
"base_uri": "https://localhost:8080/", |
|
|
715 |
"height": 852 |
|
|
716 |
}, |
|
|
717 |
"id": "zk9Nke828Fy5", |
|
|
718 |
"outputId": "97bd7755-7d70-4c18-a1af-82b1f60e405d" |
|
|
719 |
}, |
|
|
720 |
"outputs": [ |
|
|
721 |
{ |
|
|
722 |
"data": { |
|
|
723 |
"image/png": "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\n", |
|
|
724 |
"text/plain": [ |
|
|
725 |
"<Figure size 1080x1080 with 2 Axes>" |
|
|
726 |
] |
|
|
727 |
}, |
|
|
728 |
"metadata": {}, |
|
|
729 |
"output_type": "display_data" |
|
|
730 |
} |
|
|
731 |
], |
|
|
732 |
"source": [ |
|
|
733 |
"from mlxtend.plotting import plot_confusion_matrix \n", |
|
|
734 |
"\n", |
|
|
735 |
"y_pred=model.predict(x_test)\n", |
|
|
736 |
"\n", |
|
|
737 |
"#maximum values in an axis\n", |
|
|
738 |
"prediction = np.argmax(y_pred,axis=1)\n", |
|
|
739 |
"\n", |
|
|
740 |
"import numpy as np\n", |
|
|
741 |
"label=np.argmax(y_test, axis=1)\n", |
|
|
742 |
"label[1]\n", |
|
|
743 |
"\n", |
|
|
744 |
"#confution matrix based on x_test and y_pred\n", |
|
|
745 |
"cnn_matrix = confusion_matrix(label, prediction)\n", |
|
|
746 |
"\n", |
|
|
747 |
"#plot confusion matrices for each model\n", |
|
|
748 |
"\n", |
|
|
749 |
"classes = ['0', '1', '2' , '3' , '4' , '5' , '6']\n", |
|
|
750 |
"\n", |
|
|
751 |
"plot_1 = plot_confusion_matrix(conf_mat = cnn_matrix,\n", |
|
|
752 |
" colorbar=True,\n", |
|
|
753 |
" show_absolute=True,\n", |
|
|
754 |
" show_normed=True,\n", |
|
|
755 |
" figsize=(15,15))\n", |
|
|
756 |
"\n", |
|
|
757 |
"\n" |
|
|
758 |
] |
|
|
759 |
} |
|
|
760 |
], |
|
|
761 |
"metadata": { |
|
|
762 |
"accelerator": "GPU", |
|
|
763 |
"colab": { |
|
|
764 |
"collapsed_sections": [], |
|
|
765 |
"name": "final.ipynb", |
|
|
766 |
"provenance": [] |
|
|
767 |
}, |
|
|
768 |
"kernelspec": { |
|
|
769 |
"display_name": "Python 3", |
|
|
770 |
"language": "python", |
|
|
771 |
"name": "python3" |
|
|
772 |
}, |
|
|
773 |
"language_info": { |
|
|
774 |
"codemirror_mode": { |
|
|
775 |
"name": "ipython", |
|
|
776 |
"version": 3 |
|
|
777 |
}, |
|
|
778 |
"file_extension": ".py", |
|
|
779 |
"mimetype": "text/x-python", |
|
|
780 |
"name": "python", |
|
|
781 |
"nbconvert_exporter": "python", |
|
|
782 |
"pygments_lexer": "ipython3", |
|
|
783 |
"version": "3.8.5" |
|
|
784 |
} |
|
|
785 |
}, |
|
|
786 |
"nbformat": 4, |
|
|
787 |
"nbformat_minor": 1 |
|
|
788 |
} |