File size: 2,230 Bytes
b7e2c4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np
import pandas as pd
import os
import cv2
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
import keras 
from tqdm import tqdm
from tensorflow.keras.layers import Dense, Flatten ,Dropout, Conv2D, MaxPool2D, BatchNormalization,Input
from tensorflow.keras.models import Sequential
from keras.callbacks import EarlyStopping,ModelCheckpoint
from sklearn.metrics import confusion_matrix , accuracy_score
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from keras.applications.vgg16 import VGG16,preprocess_input, decode_predictions
from keras.preprocessing import image
import glob 
import pandas as pd
import matplotlib.pyplot as plotter
import warnings
from tensorflow.keras import Model
warnings.filterwarnings('ignore')

train_data_dir = "animals10/raw-img"
batch_size = 32
target_size = (224,224)
validation_split = 0.2
train= tf.keras.preprocessing.image_dataset_from_directory(
    train_data_dir,
    validation_split=validation_split,
    subset="training",
    seed=100,
    image_size=target_size,
    batch_size=batch_size,
)
validation= tf.keras.preprocessing.image_dataset_from_directory(
    train_data_dir,
    validation_split=validation_split,
    subset="validation",
    seed=200,
    image_size=target_size,
    batch_size=batch_size,
)

vgg16 = VGG16(weights='imagenet', input_shape=(224,224,3), classes=10,include_top=False)

for layer in vgg16.layers:
    layer.trainable = False
    
x = Flatten()(vgg16.output)
x = Dense(256, activation='relu')(x)
x = Dropout(0.5)(x)
predictions = Dense(10, activation='softmax')(x)

vgg16_model = Model(inputs=vgg16.input, outputs=predictions)
# vgg16_model.summary()

vgg16_model.compile(optimizer ='Adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])

checkpoint =ModelCheckpoint("VGG16_model.h5", save_best_only=True)
early_stopping =EarlyStopping(patience=5, restore_best_weights=True)

VGG16=vgg16_model.fit_generator(train,epochs=30,validation_data=validation,callbacks=[checkpoint,early_stopping])

score, acc = vgg16_model.evaluate(validation)
print('Test Loss =', score)
print('Test Accuracy =', acc)