-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
90 lines (65 loc) · 2.34 KB
/
main.py
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
#URL = https://www.youtube.com/watch?v=1mHqmanFUZQ
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
import os
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten
from keras.layers import Conv2D,MaxPool2D
import os
train_data_dir = 'data/train'
validation_data_dir = 'data/test'
train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=30,shear_range=0.3,zoom_range=0.3,
horizontal_flip=True,fill_mode='nearest')
validation_datagen = ImageDataGenerator(rescale=1./255)
train_genrator = train_datagen.flow_from_directory(
train_data_dir,
color_mode='grayscale',
target_size=(48,48),
batch_size=32,
class_mode='categorical',
shuffle=True
)
validation_genrator = validation_datagen.flow_from_directory(
validation_data_dir,
color_mode='grayscale',
target_size=(48, 48),
batch_size=32,
class_mode='categorical',
shuffle=True
)
class_labels = ['Angry','Disgust','Fear','Happy','Neutral','Sad','Surprise']
img,label = train_genrator.__next__()
model = Sequential()
model.add(Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(48,48,1)))
model.add(Conv2D(64,kernel_size=(3,3),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.1))
model.add(Conv2D(128,kernel_size=(3,3),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.1))
model.add(Conv2D(256,kernel_size=(3,3),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.1))
model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(7,activation='softmax'))
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
print(model.summary())
train_path = 'data/train/'
test_path = 'data/test'
num_train_images=0
for root, dirs, files in os.walk(train_path):
num_train_images+=len(files)
num_test_images=0
for root, dirs, files in os.walk(test_path):
num_test_images+=len(files)
epochs=100
history = model.fit(train_genrator, steps_per_epoch=num_train_images//32,
epochs=epochs,
validation_data=validation_genrator,
validation_steps=num_test_images//32)
model.save('sentimentanalyser.h5')