File size: 59,928 Bytes
bdaa6de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6f315eb9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\losses.py:2976: The name tf.losses.sparse_softmax_cross_entropy is deprecated. Please use tf.compat.v1.losses.sparse_softmax_cross_entropy instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from keras.utils import to_categorical\n",
    "from keras.preprocessing.image import load_img\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D\n",
    "import os\n",
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "935ca020",
   "metadata": {},
   "outputs": [],
   "source": [
    "TRAIN_DIR = 'train/'\n",
    "TEST_DIR = 'test/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "332e0c3d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def createdataframe(dir):\n",
    "    image_paths = []\n",
    "    labels = []\n",
    "    for label in os.listdir(dir):\n",
    "        for imagename in os.listdir(os.path.join(dir,label)):\n",
    "            image_paths.append(os.path.join(dir,label,imagename))\n",
    "            labels.append(label)\n",
    "        print(label, \"completed\")\n",
    "    return image_paths,labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "01a141b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "angry completed\n",
      "disgust completed\n",
      "fear completed\n",
      "happy completed\n",
      "neutral completed\n",
      "sad completed\n",
      "surprise completed\n"
     ]
    }
   ],
   "source": [
    "train = pd.DataFrame()\n",
    "train['image'], train['label'] = createdataframe(TRAIN_DIR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c511fc80",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                      image     label\n",
      "0         train/angry\\Training_10118481.jpg     angry\n",
      "1         train/angry\\Training_10120469.jpg     angry\n",
      "2         train/angry\\Training_10131352.jpg     angry\n",
      "3         train/angry\\Training_10161559.jpg     angry\n",
      "4          train/angry\\Training_1021836.jpg     angry\n",
      "...                                     ...       ...\n",
      "28704  train/surprise\\Training_99916297.jpg  surprise\n",
      "28705  train/surprise\\Training_99924420.jpg  surprise\n",
      "28706  train/surprise\\Training_99937001.jpg  surprise\n",
      "28707  train/surprise\\Training_99951755.jpg  surprise\n",
      "28708  train/surprise\\Training_99984132.jpg  surprise\n",
      "\n",
      "[28709 rows x 2 columns]\n"
     ]
    }
   ],
   "source": [
    "print(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b3513e60",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "angry completed\n",
      "disgust completed\n",
      "fear completed\n",
      "happy completed\n",
      "neutral completed\n",
      "sad completed\n",
      "surprise completed\n"
     ]
    }
   ],
   "source": [
    "test = pd.DataFrame()\n",
    "test['image'], test['label'] = createdataframe(TEST_DIR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ebf2655c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                      image     label\n",
      "0       test/angry\\PrivateTest_10131363.jpg     angry\n",
      "1       test/angry\\PrivateTest_10304478.jpg     angry\n",
      "2        test/angry\\PrivateTest_1054527.jpg     angry\n",
      "3       test/angry\\PrivateTest_10590091.jpg     angry\n",
      "4        test/angry\\PrivateTest_1109992.jpg     angry\n",
      "...                                     ...       ...\n",
      "7173  test/surprise\\PublicTest_98089595.jpg  surprise\n",
      "7174  test/surprise\\PublicTest_98567249.jpg  surprise\n",
      "7175  test/surprise\\PublicTest_98972870.jpg  surprise\n",
      "7176  test/surprise\\PublicTest_99242645.jpg  surprise\n",
      "7177  test/surprise\\PublicTest_99446963.jpg  surprise\n",
      "\n",
      "[7178 rows x 2 columns]\n",
      "0         test/angry\\PrivateTest_10131363.jpg\n",
      "1         test/angry\\PrivateTest_10304478.jpg\n",
      "2          test/angry\\PrivateTest_1054527.jpg\n",
      "3         test/angry\\PrivateTest_10590091.jpg\n",
      "4          test/angry\\PrivateTest_1109992.jpg\n",
      "                        ...                  \n",
      "7173    test/surprise\\PublicTest_98089595.jpg\n",
      "7174    test/surprise\\PublicTest_98567249.jpg\n",
      "7175    test/surprise\\PublicTest_98972870.jpg\n",
      "7176    test/surprise\\PublicTest_99242645.jpg\n",
      "7177    test/surprise\\PublicTest_99446963.jpg\n",
      "Name: image, Length: 7178, dtype: object\n"
     ]
    }
   ],
   "source": [
    "print(test)\n",
    "print(test['image'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0a2560d4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tqdm.notebook import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "cc33ae75",
   "metadata": {},
   "outputs": [],
   "source": [
    "def extract_features(images):\n",
    "    features = []\n",
    "    for image in tqdm(images):\n",
    "        img = load_img(image,grayscale =  True )\n",
    "        img = np.array(img)\n",
    "        features.append(img)\n",
    "    features = np.array(features)\n",
    "    features = features.reshape(len(features),48,48,1)\n",
    "    return features\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8f225635",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fde4e5ad7d6348eb84d8cc1db55a7ce9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/28709 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\image_utils.py:409: UserWarning: grayscale is deprecated. Please use color_mode = \"grayscale\"\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "train_features = extract_features(train['image']) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3a1aeb79",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4c3223b79e024df2984d83dde895a82f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/7178 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_features = extract_features(test['image'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "cee402d1",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = train_features/255.0\n",
    "x_test = test_features/255.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f0748fb7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7123f988",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LabelEncoder()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LabelEncoder</label><div class=\"sk-toggleable__content\"><pre>LabelEncoder()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "le = LabelEncoder()\n",
    "le.fit(train['label'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6ea40e28",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = le.transform(train['label'])\n",
    "y_test = le.transform(test['label'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8c46b932",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = to_categorical(y_train,num_classes = 7)\n",
    "y_test = to_categorical(y_test,num_classes = 7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "f9dde192",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\backend.py:873: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
      "\n",
      "WARNING:tensorflow:From C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\layers\\pooling\\max_pooling2d.py:161: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = Sequential()\n",
    "# convolutional layers\n",
    "model.add(Conv2D(128, kernel_size=(3,3), activation='relu', input_shape=(48,48,1)))\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(256, kernel_size=(3,3), activation='relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(512, kernel_size=(3,3), activation='relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(512, kernel_size=(3,3), activation='relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Flatten())\n",
    "# fully connected layers\n",
    "model.add(Dense(512, activation='relu'))\n",
    "model.add(Dropout(0.4))\n",
    "model.add(Dense(256, activation='relu'))\n",
    "model.add(Dropout(0.3))\n",
    "# output layer\n",
    "model.add(Dense(7, activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "13dfea4e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\optimizers\\__init__.py:309: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = 'accuracy' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "b0510b4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "WARNING:tensorflow:From C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Please use tf.compat.v1.ragged.RaggedTensorValue instead.\n",
      "\n",
      "WARNING:tensorflow:From C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\engine\\base_layer_utils.py:384: The name tf.executing_eagerly_outside_functions is deprecated. Please use tf.compat.v1.executing_eagerly_outside_functions instead.\n",
      "\n",
      "225/225 [==============================] - 131s 575ms/step - loss: 1.8224 - accuracy: 0.2477 - val_loss: 1.8187 - val_accuracy: 0.2471\n",
      "Epoch 2/10\n",
      "225/225 [==============================] - 132s 589ms/step - loss: 1.7875 - accuracy: 0.2541 - val_loss: 1.7035 - val_accuracy: 0.2885\n",
      "Epoch 3/10\n",
      "225/225 [==============================] - 131s 584ms/step - loss: 1.6936 - accuracy: 0.3138 - val_loss: 1.5651 - val_accuracy: 0.3780\n",
      "Epoch 4/10\n",
      "225/225 [==============================] - 121s 540ms/step - loss: 1.5549 - accuracy: 0.3860 - val_loss: 1.4168 - val_accuracy: 0.4505\n",
      "Epoch 5/10\n",
      "225/225 [==============================] - 121s 538ms/step - loss: 1.4721 - accuracy: 0.4243 - val_loss: 1.3776 - val_accuracy: 0.4592\n",
      "Epoch 6/10\n",
      "225/225 [==============================] - 121s 538ms/step - loss: 1.4140 - accuracy: 0.4533 - val_loss: 1.3053 - val_accuracy: 0.5013\n",
      "Epoch 7/10\n",
      "225/225 [==============================] - 121s 537ms/step - loss: 1.3719 - accuracy: 0.4747 - val_loss: 1.2842 - val_accuracy: 0.5107\n",
      "Epoch 8/10\n",
      "225/225 [==============================] - 120s 534ms/step - loss: 1.3447 - accuracy: 0.4832 - val_loss: 1.2323 - val_accuracy: 0.5270\n",
      "Epoch 9/10\n",
      "225/225 [==============================] - 121s 537ms/step - loss: 1.3110 - accuracy: 0.5013 - val_loss: 1.2227 - val_accuracy: 0.5383\n",
      "Epoch 10/10\n",
      "225/225 [==============================] - 121s 538ms/step - loss: 1.2950 - accuracy: 0.5043 - val_loss: 1.1886 - val_accuracy: 0.5467\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.src.callbacks.History at 0x244d34a3190>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.fit(x= x_train,y = y_train, batch_size = 128, epochs = 10, validation_data = (x_test,y_test)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ebf1eee6",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\engine\\training.py:3103: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.\n",
      "  saving_api.save_model(\n"
     ]
    }
   ],
   "source": [
    "model_json = model.to_json()\n",
    "with open(\"emotiondetector.json\",'w') as json_file:\n",
    "    json_file.write(model_json)\n",
    "model.save(\"emotiondetector.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "053f5a39",
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.models import model_from_json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "afaf64b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "json_file = open(\"emotiondetector.json\", \"r\")\n",
    "model_json = json_file.read()\n",
    "json_file.close()\n",
    "model = model_from_json(model_json)\n",
    "model.load_weights(\"emotiondetector.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "f27961d7",
   "metadata": {},
   "outputs": [],
   "source": [
    "label = ['angry','disgust','fear','happy','neutral','sad','surprise']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "a5a8caa2",
   "metadata": {},
   "outputs": [],
   "source": [
    "def ef(image):\n",
    "    img = load_img(image,grayscale =  True )\n",
    "    feature = np.array(img)\n",
    "    feature = feature.reshape(1,48,48,1)\n",
    "    return feature/255.0\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "0b457b7e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "original image is of sad\n",
      "1/1 [==============================] - 0s 119ms/step\n",
      "model prediction is  angry\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\image_utils.py:409: UserWarning: grayscale is deprecated. Please use color_mode = \"grayscale\"\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "image = 'train/sad/Training_1369050.jpg'\n",
    "print(\"original image is of sad\")\n",
    "img = ef(image)\n",
    "pred = model.predict(img)\n",
    "pred_label = label[pred.argmax()]\n",
    "print(\"model prediction is \",pred_label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "9309ab81",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "84c37c5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "original image is of sad\n",
      "1/1 [==============================] - 0s 23ms/step\n",
      "model prediction is  angry\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Hussnain Khalid\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\image_utils.py:409: UserWarning: grayscale is deprecated. Please use color_mode = \"grayscale\"\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x244f1935050>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "image = 'train/sad/Training_1369050.jpg'\n",
    "print(\"original image is of sad\")\n",
    "img = ef(image)\n",
    "pred = model.predict(img)\n",
    "pred_label = label[pred.argmax()]\n",
    "print(\"model prediction is \",pred_label)\n",
    "plt.imshow(img.reshape(48,48),cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "8773828e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "original image is of fear\n",
      "1/1 [==============================] - 0s 22ms/step\n",
      "model prediction is  sad\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x244f198fa90>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "image = 'train/fear/Training_10133194.jpg'\n",
    "print(\"original image is of fear\")\n",
    "img = ef(image)\n",
    "pred = model.predict(img)\n",
    "pred_label = label[pred.argmax()]\n",
    "print(\"model prediction is \",pred_label)\n",
    "plt.imshow(img.reshape(48,48),cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "096c4183",
   "metadata": {},
   "outputs": [],
   "source": [
    " # import the necessary packages\n",
    "from os import path\n",
    "\n",
    "# define the base path to the emotion dataset\n",
    "BASE_PATH = \"/raid/datasets/fer2013\"\n",
    "# use the base path to define the path to the input emotions file\n",
    "INPUT_PATH = path.sep.join([BASE_PATH, \"fer2013/fer2013.csv\"])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "f46f46f8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# define the number of classes (set to 6 if you are ignoring the\n",
    "# \"disgust\" class)\n",
    "# NUM_CLASSES = 7\n",
    "NUM_CLASSES = 6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "5b37209e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# define the path to the output training, validation, and testing\n",
    "# HDF5 files\n",
    "TRAIN_HDF5 = path.sep.join([BASE_PATH, \"hdf5/train.hdf5\"])\n",
    "VAL_HDF5 = path.sep.join([BASE_PATH, \"hdf5/val.hdf5\"])\n",
    "TEST_HDF5 = path.sep.join([BASE_PATH, \"hdf5/test.hdf5\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "83080066",
   "metadata": {},
   "outputs": [],
   "source": [
    "# define the batch size\n",
    "BATCH_SIZE = 128\n",
    "# define the path to where output logs will be stored\n",
    "OUTPUT_PATH = path.sep.join([BASE_PATH, \"output\"])\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}