이한솔

ADD detectionModel

1 +{
2 + "nbformat": 4,
3 + "nbformat_minor": 0,
4 + "metadata": {
5 + "colab": {
6 + "name": "Untitled3.ipynb.zip",
7 + "provenance": [],
8 + "collapsed_sections": []
9 + },
10 + "kernelspec": {
11 + "display_name": "Python 3",
12 + "language": "python",
13 + "name": "python3"
14 + },
15 + "language_info": {
16 + "codemirror_mode": {
17 + "name": "ipython",
18 + "version": 3
19 + },
20 + "file_extension": ".py",
21 + "mimetype": "text/x-python",
22 + "name": "python",
23 + "nbconvert_exporter": "python",
24 + "pygments_lexer": "ipython3",
25 + "version": "3.7.6"
26 + }
27 + },
28 + "cells": [
29 + {
30 + "cell_type": "markdown",
31 + "metadata": {
32 + "id": "pTOLXzPreVMW"
33 + },
34 + "source": [
35 + "# *Pre process*"
36 + ]
37 + },
38 + {
39 + "cell_type": "code",
40 + "metadata": {
41 + "id": "lAltJ7NjFz5e"
42 + },
43 + "source": [
44 + "import csv\n",
45 + "\n",
46 + "f_fuzzy = open('fuzzy_dataset.csv', 'r')\n",
47 + "f_dos = open('DoS_dataset.csv', 'r')\n",
48 + "f_spoof = open('gear_dataset.csv', 'r')\n",
49 + "\n",
50 + "f2 = open('flattened_dataset.csv', 'w')\n",
51 + "\n",
52 + "c_fuzzy = csv.reader(f_fuzzy)\n",
53 + "c_dos = csv.reader(f_dos)\n",
54 + "c_spoof = csv.reader(f_spoof)\n",
55 + "\n",
56 + "fw = csv.writer(f2)\n",
57 + "fw.writerow(['TimeStamp', 'CAN_ID', 'DLC', 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'Class'])\n",
58 + "\n",
59 + "for line in c_fuzzy :\n",
60 + " newdata = []\n",
61 + " #TimeStamp\n",
62 + " newdata.append(line[0])\n",
63 + " #CAN_ID \n",
64 + " can_id = int(line[1], 16)\n",
65 + " newdata.append(can_id)\n",
66 + " #DLC\n",
67 + " newdata.append(line[2])\n",
68 + "\n",
69 + " ll = len(line)\n",
70 + " num = int(line[2])\n",
71 + "\n",
72 + " data = []\n",
73 + " if num == 8 :\n",
74 + " data = line[3:11]\n",
75 + " else :\n",
76 + " data = line[3: 3 + num] \n",
77 + " for _ in range(8 - num):\n",
78 + " data.append('0')\n",
79 + " \n",
80 + " newdata.extend(list(map(lambda x:int(x, 16), data)))\n",
81 + "\n",
82 + " #Class\n",
83 + " if line[-1] == 'T':\n",
84 + " newdata.append('F')\n",
85 + " else:\n",
86 + " newdata.append('R')\n",
87 + " \n",
88 + " fw.writerow(newdata)\n",
89 + "\n",
90 + "for line in c_dos :\n",
91 + " newdata = []\n",
92 + " #TimeStamp\n",
93 + " newdata.append(line[0])\n",
94 + " #CAN_ID \n",
95 + " can_id = int(line[1], 16)\n",
96 + " newdata.append(can_id)\n",
97 + " #DLC\n",
98 + " newdata.append(line[2])\n",
99 + "\n",
100 + " ll = len(line)\n",
101 + " num = int(line[2])\n",
102 + "\n",
103 + " data = []\n",
104 + " if num == 8 :\n",
105 + " data = line[3:11]\n",
106 + " else :\n",
107 + " data = line[3: 3 + num] \n",
108 + " for _ in range(8 - num):\n",
109 + " data.append('0')\n",
110 + " \n",
111 + " newdata.extend(list(map(lambda x:int(x, 16), data)))\n",
112 + "\n",
113 + " #Class\n",
114 + " if line[-1] == 'T':\n",
115 + " newdata.append('D')\n",
116 + " else:\n",
117 + " newdata.append('R')\n",
118 + " \n",
119 + " fw.writerow(newdata)\n",
120 + "\n",
121 + "for line in c_spoof :\n",
122 + " newdata = []\n",
123 + " #TimeStamp\n",
124 + " newdata.append(line[0])\n",
125 + " #CAN_ID \n",
126 + " can_id = int(line[1], 16)\n",
127 + " newdata.append(can_id)\n",
128 + " #DLC\n",
129 + " newdata.append(line[2])\n",
130 + "\n",
131 + " ll = len(line)\n",
132 + " num = int(line[2])\n",
133 + "\n",
134 + " data = []\n",
135 + " if num == 8 :\n",
136 + " data = line[3:11]\n",
137 + " else :\n",
138 + " data = line[3: 3 + num] \n",
139 + " for _ in range(8 - num):\n",
140 + " data.append('0')\n",
141 + " \n",
142 + " newdata.extend(list(map(lambda x:int(x, 16), data)))\n",
143 + "\n",
144 + " #Class\n",
145 + " if line[-1] == 'T':\n",
146 + " newdata.append('S')\n",
147 + " else:\n",
148 + " newdata.append('R')\n",
149 + " \n",
150 + " fw.writerow(newdata)\n",
151 + "\n",
152 + "f_fuzzy.close()\n",
153 + "f_dos.close()\n",
154 + "f_spoof.close()\n",
155 + "f2.close()\n"
156 + ],
157 + "execution_count": null,
158 + "outputs": []
159 + },
160 + {
161 + "cell_type": "code",
162 + "metadata": {
163 + "id": "uXQDTXcy-svF",
164 + "outputId": "e2ef2d92-a7ac-4edd-efe5-f1cd1fdd0640",
165 + "colab": {
166 + "base_uri": "https://localhost:8080/",
167 + "height": 142
168 + }
169 + },
170 + "source": [
171 + "import pandas as pd\n",
172 + "DoSData = 'flattened_dataset.csv'\n",
173 + "data2 = pd.read_csv(DoSData)\n",
174 + "data2.head(3)"
175 + ],
176 + "execution_count": null,
177 + "outputs": [
178 + {
179 + "output_type": "execute_result",
180 + "data": {
181 + "text/html": [
182 + "<div>\n",
183 + "<style scoped>\n",
184 + " .dataframe tbody tr th:only-of-type {\n",
185 + " vertical-align: middle;\n",
186 + " }\n",
187 + "\n",
188 + " .dataframe tbody tr th {\n",
189 + " vertical-align: top;\n",
190 + " }\n",
191 + "\n",
192 + " .dataframe thead th {\n",
193 + " text-align: right;\n",
194 + " }\n",
195 + "</style>\n",
196 + "<table border=\"1\" class=\"dataframe\">\n",
197 + " <thead>\n",
198 + " <tr style=\"text-align: right;\">\n",
199 + " <th></th>\n",
200 + " <th>TimeStamp</th>\n",
201 + " <th>CAN_ID</th>\n",
202 + " <th>DLC</th>\n",
203 + " <th>D0</th>\n",
204 + " <th>D1</th>\n",
205 + " <th>D2</th>\n",
206 + " <th>D3</th>\n",
207 + " <th>D4</th>\n",
208 + " <th>D5</th>\n",
209 + " <th>D6</th>\n",
210 + " <th>D7</th>\n",
211 + " <th>Class</th>\n",
212 + " </tr>\n",
213 + " </thead>\n",
214 + " <tbody>\n",
215 + " <tr>\n",
216 + " <th>0</th>\n",
217 + " <td>1.478196e+09</td>\n",
218 + " <td>1349</td>\n",
219 + " <td>8</td>\n",
220 + " <td>216</td>\n",
221 + " <td>0</td>\n",
222 + " <td>0</td>\n",
223 + " <td>138</td>\n",
224 + " <td>0</td>\n",
225 + " <td>0</td>\n",
226 + " <td>0</td>\n",
227 + " <td>0</td>\n",
228 + " <td>R</td>\n",
229 + " </tr>\n",
230 + " <tr>\n",
231 + " <th>1</th>\n",
232 + " <td>1.478196e+09</td>\n",
233 + " <td>688</td>\n",
234 + " <td>5</td>\n",
235 + " <td>255</td>\n",
236 + " <td>127</td>\n",
237 + " <td>0</td>\n",
238 + " <td>5</td>\n",
239 + " <td>73</td>\n",
240 + " <td>0</td>\n",
241 + " <td>0</td>\n",
242 + " <td>0</td>\n",
243 + " <td>R</td>\n",
244 + " </tr>\n",
245 + " <tr>\n",
246 + " <th>2</th>\n",
247 + " <td>1.478196e+09</td>\n",
248 + " <td>2</td>\n",
249 + " <td>8</td>\n",
250 + " <td>0</td>\n",
251 + " <td>0</td>\n",
252 + " <td>0</td>\n",
253 + " <td>0</td>\n",
254 + " <td>0</td>\n",
255 + " <td>1</td>\n",
256 + " <td>7</td>\n",
257 + " <td>21</td>\n",
258 + " <td>R</td>\n",
259 + " </tr>\n",
260 + " </tbody>\n",
261 + "</table>\n",
262 + "</div>"
263 + ],
264 + "text/plain": [
265 + " TimeStamp CAN_ID DLC D0 D1 D2 D3 D4 D5 D6 D7 Class\n",
266 + "0 1.478196e+09 1349 8 216 0 0 138 0 0 0 0 R\n",
267 + "1 1.478196e+09 688 5 255 127 0 5 73 0 0 0 R\n",
268 + "2 1.478196e+09 2 8 0 0 0 0 0 1 7 21 R"
269 + ]
270 + },
271 + "metadata": {
272 + "tags": []
273 + },
274 + "execution_count": 2
275 + }
276 + ]
277 + },
278 + {
279 + "cell_type": "code",
280 + "metadata": {
281 + "id": "cOJ-HhIjaGuw"
282 + },
283 + "source": [
284 + "import numpy as np\n",
285 + "import os\n",
286 + "import pandas as pd\n",
287 + "from sklearn.model_selection import train_test_split\n",
288 + "\n",
289 + "import matplotlib.pyplot as plt\n",
290 + "import seaborn as sns\n"
291 + ],
292 + "execution_count": null,
293 + "outputs": []
294 + },
295 + {
296 + "cell_type": "code",
297 + "metadata": {
298 + "id": "Vqdupl65laNN",
299 + "outputId": "4ff814be-b707-48be-8455-f4e7548baa6c",
300 + "colab": {
301 + "base_uri": "https://localhost:8080/"
302 + }
303 + },
304 + "source": [
305 + "from google.colab import drive\n",
306 + "drive.mount('/content/drive')"
307 + ],
308 + "execution_count": null,
309 + "outputs": [
310 + {
311 + "output_type": "stream",
312 + "text": [
313 + "Mounted at /content/drive\n"
314 + ],
315 + "name": "stdout"
316 + }
317 + ]
318 + },
319 + {
320 + "cell_type": "code",
321 + "metadata": {
322 + "id": "NMIiv0ydmU9M",
323 + "outputId": "ce8efb61-2749-4b90-a8c8-41752532457c",
324 + "colab": {
325 + "base_uri": "https://localhost:8080/",
326 + "height": 142
327 + }
328 + },
329 + "source": [
330 + "DATASET = 'flattened_dataset.csv'\n",
331 + "\n",
332 + "data = pd.read_csv(DATASET)\n",
333 + "data.head(3)\n",
334 + "\n",
335 + "# Timestamp / CAN_ID / DLC / DATA[0~7] / Flag(T or R)\n",
336 + "# Flag T : injected message\n",
337 + "# Flag R : normal message"
338 + ],
339 + "execution_count": null,
340 + "outputs": [
341 + {
342 + "output_type": "execute_result",
343 + "data": {
344 + "text/html": [
345 + "<div>\n",
346 + "<style scoped>\n",
347 + " .dataframe tbody tr th:only-of-type {\n",
348 + " vertical-align: middle;\n",
349 + " }\n",
350 + "\n",
351 + " .dataframe tbody tr th {\n",
352 + " vertical-align: top;\n",
353 + " }\n",
354 + "\n",
355 + " .dataframe thead th {\n",
356 + " text-align: right;\n",
357 + " }\n",
358 + "</style>\n",
359 + "<table border=\"1\" class=\"dataframe\">\n",
360 + " <thead>\n",
361 + " <tr style=\"text-align: right;\">\n",
362 + " <th></th>\n",
363 + " <th>TimeStamp</th>\n",
364 + " <th>CAN_ID</th>\n",
365 + " <th>DLC</th>\n",
366 + " <th>D0</th>\n",
367 + " <th>D1</th>\n",
368 + " <th>D2</th>\n",
369 + " <th>D3</th>\n",
370 + " <th>D4</th>\n",
371 + " <th>D5</th>\n",
372 + " <th>D6</th>\n",
373 + " <th>D7</th>\n",
374 + " <th>Class</th>\n",
375 + " </tr>\n",
376 + " </thead>\n",
377 + " <tbody>\n",
378 + " <tr>\n",
379 + " <th>0</th>\n",
380 + " <td>1.478196e+09</td>\n",
381 + " <td>1349</td>\n",
382 + " <td>8</td>\n",
383 + " <td>216</td>\n",
384 + " <td>0</td>\n",
385 + " <td>0</td>\n",
386 + " <td>138</td>\n",
387 + " <td>0</td>\n",
388 + " <td>0</td>\n",
389 + " <td>0</td>\n",
390 + " <td>0</td>\n",
391 + " <td>R</td>\n",
392 + " </tr>\n",
393 + " <tr>\n",
394 + " <th>1</th>\n",
395 + " <td>1.478196e+09</td>\n",
396 + " <td>688</td>\n",
397 + " <td>5</td>\n",
398 + " <td>255</td>\n",
399 + " <td>127</td>\n",
400 + " <td>0</td>\n",
401 + " <td>5</td>\n",
402 + " <td>73</td>\n",
403 + " <td>0</td>\n",
404 + " <td>0</td>\n",
405 + " <td>0</td>\n",
406 + " <td>R</td>\n",
407 + " </tr>\n",
408 + " <tr>\n",
409 + " <th>2</th>\n",
410 + " <td>1.478196e+09</td>\n",
411 + " <td>2</td>\n",
412 + " <td>8</td>\n",
413 + " <td>0</td>\n",
414 + " <td>0</td>\n",
415 + " <td>0</td>\n",
416 + " <td>0</td>\n",
417 + " <td>0</td>\n",
418 + " <td>1</td>\n",
419 + " <td>7</td>\n",
420 + " <td>21</td>\n",
421 + " <td>R</td>\n",
422 + " </tr>\n",
423 + " </tbody>\n",
424 + "</table>\n",
425 + "</div>"
426 + ],
427 + "text/plain": [
428 + " TimeStamp CAN_ID DLC D0 D1 D2 D3 D4 D5 D6 D7 Class\n",
429 + "0 1.478196e+09 1349 8 216 0 0 138 0 0 0 0 R\n",
430 + "1 1.478196e+09 688 5 255 127 0 5 73 0 0 0 R\n",
431 + "2 1.478196e+09 2 8 0 0 0 0 0 1 7 21 R"
432 + ]
433 + },
434 + "metadata": {
435 + "tags": []
436 + },
437 + "execution_count": 4
438 + }
439 + ]
440 + },
441 + {
442 + "cell_type": "code",
443 + "metadata": {
444 + "id": "DP5WOQ4u-ZeB",
445 + "outputId": "1df9f838-df43-43f1-edca-9d2dc73dd832",
446 + "colab": {
447 + "base_uri": "https://localhost:8080/"
448 + }
449 + },
450 + "source": [
451 + "print(data[22300:22310])"
452 + ],
453 + "execution_count": null,
454 + "outputs": [
455 + {
456 + "output_type": "stream",
457 + "text": [
458 + " TimeStamp CAN_ID DLC D0 D1 D2 D3 D4 D5 D6 D7 Class\n",
459 + "22300 1.478196e+09 1264 8 0 0 0 128 0 103 209 19 R\n",
460 + "22301 1.478196e+09 516 8 46 83 79 59 102 176 183 207 F\n",
461 + "22302 1.478196e+09 1854 8 228 145 60 2 206 144 153 114 F\n",
462 + "22303 1.478196e+09 688 5 254 255 0 7 142 0 0 0 R\n",
463 + "22304 1.478196e+09 1465 8 137 118 76 181 133 103 221 15 F\n",
464 + "22305 1.478196e+09 848 8 5 32 244 104 120 0 0 193 R\n",
465 + "22306 1.478196e+09 1256 8 98 64 27 38 174 199 230 232 F\n",
466 + "22307 1.478196e+09 868 8 81 131 115 250 11 5 92 212 F\n",
467 + "22308 1.478196e+09 955 8 205 183 172 152 197 46 6 100 F\n",
468 + "22309 1.478196e+09 704 8 21 0 0 0 0 0 0 0 R\n"
469 + ],
470 + "name": "stdout"
471 + }
472 + ]
473 + },
474 + {
475 + "cell_type": "code",
476 + "metadata": {
477 + "id": "b5MCnW9uATlv"
478 + },
479 + "source": [
480 + "import csv\n",
481 + "\n",
482 + "def Preprocess() :\n",
483 + " f1 = open('flattened_dataset.csv', 'r')\n",
484 + " fr = csv.reader(f1)\n",
485 + " d = [] \n",
486 + " for line in fr :\n",
487 + " l = []\n",
488 + " #l.append(line[0])\n",
489 + " l.append(line[1])\n",
490 + " l.append(line[2])\n",
491 + " l.extend(line[3:11])\n",
492 + " class_ = [1,0,0,0]\n",
493 + " if line[-1] == 'R' :\n",
494 + " class_ = [1,0,0,0]\n",
495 + " elif line[-1] == 'F':\n",
496 + " class_ = [0,1,0,0]\n",
497 + " elif line[-1] == 'D':\n",
498 + " class_ = [0,0,1,0]\n",
499 + " elif line[-1] == 'S':\n",
500 + " class_ = [0,0,0,1]\n",
501 + " l.append(class_)\n",
502 + " d.append(l)\n",
503 + " d = d[1:]\n",
504 + " return d\n",
505 + "\n",
506 + "datalist = Preprocess()"
507 + ],
508 + "execution_count": null,
509 + "outputs": []
510 + },
511 + {
512 + "cell_type": "markdown",
513 + "metadata": {
514 + "id": "ZAlE8vpReK9-"
515 + },
516 + "source": [
517 + "# *Spilt train-set and test-set*"
518 + ]
519 + },
520 + {
521 + "cell_type": "code",
522 + "metadata": {
523 + "id": "Tr2hXz7MLKH-"
524 + },
525 + "source": [
526 + "def CreateSequences(arr, length) : # Three-Dim\n",
527 + " data = []\n",
528 + " if length == 1 :\n",
529 + " for i in range((len(arr))) :\n",
530 + " t = [arr[i]]\n",
531 + " data.append(t)\n",
532 + " else :\n",
533 + " for i in range(len(arr)-length-1):\n",
534 + " t = arr[i:(i+length)]\n",
535 + " data.append(t)\n",
536 + " \n",
537 + " return data"
538 + ],
539 + "execution_count": null,
540 + "outputs": []
541 + },
542 + {
543 + "cell_type": "code",
544 + "metadata": {
545 + "id": "KNa4pIvphsev"
546 + },
547 + "source": [
548 + "import numpy\n",
549 + "df = pd.DataFrame(datalist, columns=['CAN_ID', 'DLC', 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'Class'])\n",
550 + "n = len(df)\n",
551 + "\n",
552 + "X_train = df.iloc[0:n, 0:10].values # 나머지\n",
553 + "Y_train = df.iloc[0:n, 10].values # class\n",
554 + "\n",
555 + "X_train = X_train.astype(numpy.float32)\n",
556 + "#Y_train = Y_train.astype(numpy.float32)\n",
557 + "\n",
558 + "X_train = CreateSequences(X_train, 1)\n",
559 + "Y_train = CreateSequences(Y_train, 1)\n",
560 + "\n",
561 + "# Data and labels are all numpy array\n",
562 + "X_train = np.asarray(X_train)\n",
563 + "Y_train = np.asarray(Y_train)\n",
564 + "\n",
565 + "Y_train = np.squeeze(Y_train, axis=1)\n",
566 + "x_train, x_test, y_train, y_test = train_test_split(X_train, Y_train, test_size=0.3, random_state=321)"
567 + ],
568 + "execution_count": null,
569 + "outputs": []
570 + },
571 + {
572 + "cell_type": "code",
573 + "metadata": {
574 + "id": "OPZKbqORgQ4N",
575 + "outputId": "35b3f0f9-515e-48ca-c7de-3af6ed2e4565",
576 + "colab": {
577 + "base_uri": "https://localhost:8080/"
578 + }
579 + },
580 + "source": [
581 + "print(Y_train.shape)\n",
582 + "print(x_train.shape)\n",
583 + "print(y_train.shape)\n",
584 + "print(x_test.shape)\n",
585 + "print(y_test.shape)"
586 + ],
587 + "execution_count": null,
588 + "outputs": [
589 + {
590 + "output_type": "stream",
591 + "text": [
592 + "(11947773, 4)\n",
593 + "(8363441, 1, 10)\n",
594 + "(8363441, 4)\n",
595 + "(3584332, 1, 10)\n",
596 + "(3584332, 4)\n"
597 + ],
598 + "name": "stdout"
599 + }
600 + ]
601 + },
602 + {
603 + "cell_type": "markdown",
604 + "metadata": {
605 + "id": "6bAB8v9seCuK"
606 + },
607 + "source": [
608 + "# *Model*"
609 + ]
610 + },
611 + {
612 + "cell_type": "code",
613 + "metadata": {
614 + "id": "j35mqU12m9w4",
615 + "outputId": "483cd30c-2473-4cc1-d407-2b1f14abeff6",
616 + "colab": {
617 + "base_uri": "https://localhost:8080/"
618 + }
619 + },
620 + "source": [
621 + "# Model\n",
622 + "from keras.models import Sequential\n",
623 + "from keras.layers import Dense, LSTM, SimpleRNN, Activation, RepeatVector, TimeDistributed\n",
624 + "from keras.utils import np_utils\n",
625 + "from keras.layers.normalization import BatchNormalization\n",
626 + "\n",
627 + "model = Sequential()\n",
628 + "\n",
629 + "#model.add(LSTM(1, activation='relu', input_shape=(1, 11), input_dim=11, return_sequences=True))\n",
630 + "# Timestamp마다 출력을 반환하려면 return_sequences=True\n",
631 + "\"\"\"\n",
632 + "model.add(LSTM(100, return_sequences=True, activation='tanh', input_shape=(1, 11)))\n",
633 + "model.add(Dense(50, activation='relu'))\n",
634 + "model.add(Dense(30, activation='relu'))\n",
635 + "model.add(Dense(10, activation='relu'))\n",
636 + "model.add(Dense(1, activation='sigmoid'))\n",
637 + "\"\"\"\n",
638 + "\"\"\"\n",
639 + "model.add(LSTM(32, return_sequences=True, stateful=True, batch_input_shape=(1, 1, 11)))\n",
640 + "model.add(BatchNormalization())\n",
641 + "model.add(LSTM(32, return_sequences=True, stateful=True))\n",
642 + "model.add(BatchNormalization())\n",
643 + "model.add(LSTM(32, stateful=True))\n",
644 + "model.add(BatchNormalization())\n",
645 + "model.add(Dense(50, activation='relu'))\n",
646 + "model.add(BatchNormalization())\n",
647 + "model.add(Dense(1, activation='sigmoid'))\n",
648 + "\"\"\"\n",
649 + "\n",
650 + "model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2, input_shape=(1, 10)))\n",
651 + "#model.add(Dense(1, activation='sigmoid'))\n",
652 + "model.add(Dense(4, activation='softmax'))\n",
653 + "#model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n",
654 + "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n",
655 + "model.summary()"
656 + ],
657 + "execution_count": null,
658 + "outputs": [
659 + {
660 + "output_type": "stream",
661 + "text": [
662 + "WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
663 + "Model: \"sequential\"\n",
664 + "_________________________________________________________________\n",
665 + "Layer (type) Output Shape Param # \n",
666 + "=================================================================\n",
667 + "lstm (LSTM) (None, 100) 44400 \n",
668 + "_________________________________________________________________\n",
669 + "dense (Dense) (None, 4) 404 \n",
670 + "=================================================================\n",
671 + "Total params: 44,804\n",
672 + "Trainable params: 44,804\n",
673 + "Non-trainable params: 0\n",
674 + "_________________________________________________________________\n"
675 + ],
676 + "name": "stdout"
677 + }
678 + ]
679 + },
680 + {
681 + "cell_type": "code",
682 + "metadata": {
683 + "id": "xNHDmdrorjdd",
684 + "outputId": "a6dd00a6-a5ac-432f-b0a3-6aed03c31791",
685 + "colab": {
686 + "base_uri": "https://localhost:8080/"
687 + }
688 + },
689 + "source": [
690 + " history = model.fit(x_train, y_train, batch_size=100, epochs=20, validation_data=(x_test, y_test))"
691 + ],
692 + "execution_count": null,
693 + "outputs": [
694 + {
695 + "output_type": "stream",
696 + "text": [
697 + "Epoch 1/20\n",
698 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0202 - accuracy: 0.9946 - val_loss: 0.0029 - val_accuracy: 0.9995\n",
699 + "Epoch 2/20\n",
700 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0143 - accuracy: 0.9963 - val_loss: 0.0020 - val_accuracy: 0.9996\n",
701 + "Epoch 3/20\n",
702 + "83635/83635 [==============================] - 533s 6ms/step - loss: 0.0116 - accuracy: 0.9970 - val_loss: 0.0028 - val_accuracy: 0.9995\n",
703 + "Epoch 4/20\n",
704 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0112 - accuracy: 0.9972 - val_loss: 0.0028 - val_accuracy: 0.9997\n",
705 + "Epoch 5/20\n",
706 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0110 - accuracy: 0.9972 - val_loss: 0.0029 - val_accuracy: 0.9995\n",
707 + "Epoch 6/20\n",
708 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0104 - accuracy: 0.9974 - val_loss: 0.0037 - val_accuracy: 0.9997\n",
709 + "Epoch 7/20\n",
710 + "83635/83635 [==============================] - 533s 6ms/step - loss: 0.0102 - accuracy: 0.9974 - val_loss: 0.0041 - val_accuracy: 0.9997\n",
711 + "Epoch 8/20\n",
712 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0102 - accuracy: 0.9975 - val_loss: 0.0017 - val_accuracy: 0.9998\n",
713 + "Epoch 9/20\n",
714 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0106 - accuracy: 0.9974 - val_loss: 0.0022 - val_accuracy: 0.9996\n",
715 + "Epoch 10/20\n",
716 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0098 - accuracy: 0.9976 - val_loss: 0.0020 - val_accuracy: 0.9997\n",
717 + "Epoch 11/20\n",
718 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0094 - accuracy: 0.9977 - val_loss: 0.0057 - val_accuracy: 0.9998\n",
719 + "Epoch 12/20\n",
720 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0086 - accuracy: 0.9979 - val_loss: 0.0028 - val_accuracy: 0.9995\n",
721 + "Epoch 13/20\n",
722 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0086 - accuracy: 0.9979 - val_loss: 0.0032 - val_accuracy: 0.9996\n",
723 + "Epoch 14/20\n",
724 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0080 - accuracy: 0.9981 - val_loss: 0.0019 - val_accuracy: 0.9998\n",
725 + "Epoch 15/20\n",
726 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0078 - accuracy: 0.9982 - val_loss: 0.0016 - val_accuracy: 0.9998\n",
727 + "Epoch 16/20\n",
728 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0081 - accuracy: 0.9981 - val_loss: 0.0021 - val_accuracy: 0.9996\n",
729 + "Epoch 17/20\n",
730 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0075 - accuracy: 0.9983 - val_loss: 0.0012 - val_accuracy: 0.9998\n",
731 + "Epoch 18/20\n",
732 + "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0076 - accuracy: 0.9983 - val_loss: 0.0015 - val_accuracy: 0.9998\n",
733 + "Epoch 19/20\n",
734 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0080 - accuracy: 0.9981 - val_loss: 0.0019 - val_accuracy: 0.9996\n",
735 + "Epoch 20/20\n",
736 + "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0077 - accuracy: 0.9982 - val_loss: 0.0020 - val_accuracy: 0.9997\n"
737 + ],
738 + "name": "stdout"
739 + }
740 + ]
741 + },
742 + {
743 + "cell_type": "code",
744 + "metadata": {
745 + "id": "dVZF0rWNUjR-",
746 + "outputId": "1cf0e4a0-101f-472c-c229-fdf4a51de519",
747 + "colab": {
748 + "base_uri": "https://localhost:8080/"
749 + }
750 + },
751 + "source": [
752 + "print(\"\\n Test accuracy : %.4f\"%(model.evaluate(x_test, y_test)[1]))"
753 + ],
754 + "execution_count": null,
755 + "outputs": [
756 + {
757 + "output_type": "stream",
758 + "text": [
759 + "112011/112011 [==============================] - 181s 2ms/step - loss: 0.0020 - accuracy: 0.9997\n",
760 + "\n",
761 + " Test accuracy : 0.9997\n"
762 + ],
763 + "name": "stdout"
764 + }
765 + ]
766 + },
767 + {
768 + "cell_type": "code",
769 + "metadata": {
770 + "id": "foUA4MEwXzoj",
771 + "outputId": "4b967d97-ecce-4f8d-b26c-685000a0f44f",
772 + "colab": {
773 + "base_uri": "https://localhost:8080/",
774 + "height": 279
775 + }
776 + },
777 + "source": [
778 + "import matplotlib.pyplot as plt\n",
779 + "\n",
780 + "# 학습셋 오차\n",
781 + "y_loss = history.history['loss']\n",
782 + "# 테스트셋 오차\n",
783 + "y_vloss = history.history['val_loss']\n",
784 + "\n",
785 + "plt.plot(y_loss)\n",
786 + "plt.plot(y_vloss)\n",
787 + "plt.ylabel('loss')\n",
788 + "plt.xlabel('epoch')\n",
789 + "plt.legend(['loss','val_loss'])\n",
790 + "plt.show()"
791 + ],
792 + "execution_count": null,
793 + "outputs": [
794 + {
795 + "output_type": "display_data",
796 + "data": {
797 + "image/png": "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\n",
798 + "text/plain": [
799 + "<Figure size 432x288 with 1 Axes>"
800 + ]
801 + },
802 + "metadata": {
803 + "tags": [],
804 + "needs_background": "light"
805 + }
806 + }
807 + ]
808 + },
809 + {
810 + "cell_type": "code",
811 + "metadata": {
812 + "id": "pYRf0HTYhtUm",
813 + "outputId": "94fbccf0-3d55-49a8-91b9-ddc1be6936f3",
814 + "colab": {
815 + "base_uri": "https://localhost:8080/",
816 + "height": 280
817 + }
818 + },
819 + "source": [
820 + "y_acc = history.history['accuracy']\n",
821 + "y_vacc = history.history['val_accuracy']\n",
822 + "\n",
823 + "plt.plot(y_acc)\n",
824 + "plt.plot(y_vacc)\n",
825 + "plt.ylabel('loss')\n",
826 + "plt.xlabel('epoch')\n",
827 + "plt.legend(['accuracy','val_accuracy'])\n",
828 + "plt.show()"
829 + ],
830 + "execution_count": null,
831 + "outputs": [
832 + {
833 + "output_type": "display_data",
834 + "data": {
835 + "image/png": "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\n",
836 + "text/plain": [
837 + "<Figure size 432x288 with 1 Axes>"
838 + ]
839 + },
840 + "metadata": {
841 + "tags": [],
842 + "needs_background": "light"
843 + }
844 + }
845 + ]
846 + },
847 + {
848 + "cell_type": "code",
849 + "metadata": {
850 + "id": "FgKqLFcMh13F"
851 + },
852 + "source": [
853 + ""
854 + ],
855 + "execution_count": null,
856 + "outputs": []
857 + }
858 + ]
859 +}
...\ No newline at end of file ...\ No newline at end of file