library(keras)
library(tensorflow)
inpath = trainpath
dnall = list.files(inpath, full.names = FALSE)
dn = dnall[c(-1, -2, -3, -4)]
flyers_train = dn[1:350]
flyers_test = dn[351: 435]
Hums_train = dn[436:785]
Hums_test = dn[786: 870]
Phos_train = dn[870:1165]
Phos_test = dn[1166: 1316]
+ Train data
set.seed(1234)
TF = sample(1:350,20,replace=F)
sort(TF)
## [1] 4 40 62 77 80 89 96 99 176 185 213 217 218 221 228 236 281
## [18] 298 312 338
TH = sample(436:785,20,replace=F)
sort(TH)
## [1] 449 451 491 496 503 511 522 525 538 541 546 591 606 616 690 703 715
## [18] 720 749 765
TP = sample(870:1165,20,replace=F)
sort(TP)
## [1] 891 913 918 940 958 961 966 1008 1010 1011 1012 1016 1033 1052
## [15] 1060 1066 1073 1079 1089 1105
mypic_Train_FHP = c(dn[sort(TF)], dn[sort(TH)], dn[sort(TP)] )
mypic_Train_FHP
## [1] "Fly_003.png" "Fly_039.png" "Fly_061.png" "Fly_076.png"
## [5] "Fly_079.png" "Fly_088.png" "Fly_095.png" "Fly_098.png"
## [9] "Fly_175.png" "Fly_184.png" "Fly_212.png" "Fly_216.png"
## [13] "Fly_217.png" "Fly_220.png" "Fly_227.png" "Fly_235.png"
## [17] "Fly_280.png" "Fly_297.png" "Fly_311.png" "Fly_337.png"
## [21] "Hum_448.png" "Hum_450.png" "Hum_490.png" "Hum_495.png"
## [25] "Hum_502.png" "Hum_510.png" "Hum_521.png" "Hum_524.png"
## [29] "Hum_537.png" "Hum_540.png" "Hum_545.png" "Hum_590.png"
## [33] "Hum_605.png" "Hum_615.png" "Hum_689.png" "Hum_702.png"
## [37] "Hum_714.png" "Hum_719.png" "Hum_748.png" "Hum_764.png"
## [41] "Pho_0890.jpg" "Pho_0912.jpg" "Pho_0917.jpg" "Pho_0939.jpg"
## [45] "Pho_0957.jpg" "Pho_0960.jpg" "Pho_0965.jpg" "Pho_1007.jpg"
## [49] "Pho_1009.jpg" "Pho_1010.jpg" "Pho_1011.jpg" "Pho_1015.jpg"
## [53] "Pho_1032.jpg" "Pho_1051.jpg" "Pho_1059.jpg" "Pho_1065.jpg"
## [57] "Pho_1072.jpg" "Pho_1078.jpg" "Pho_1088.jpg" "Pho_1104.jpg"
+ test data
set.seed(4512)
GF = sample(351: 435,10,replace=F)
sort(GF)
## [1] 370 385 387 402 404 408 412 421 425 433
GH = sample(786: 870,10,replace=F)
sort(GH)
## [1] 788 817 819 832 838 847 856 857 858 869
GP = sample(1166: 1316,10,replace=F)
sort(GP)
## [1] 1174 1201 1216 1230 1252 1254 1265 1269 1279 1293
mypic_Test_FHP = c(dn[sort(GF)], dn[sort(GH)],dn[sort(GP)] )
mypic_Test_FHP
## [1] "Fly_369.png" "Fly_384.png" "Fly_386.png" "Fly_401.png"
## [5] "Fly_403.png" "Fly_407.png" "Fly_411.png" "Fly_420.png"
## [9] "Fly_424.png" "Fly_432.png" "Hum_787.png" "Hum_816.png"
## [13] "Hum_818.png" "Hum_831.png" "Hum_837.png" "Hum_846.png"
## [17] "Hum_855.png" "Hum_856.png" "Hum_857.png" "Hum_868.png"
## [21] "Pho_1173.jpg" "Pho_1200.jpg" "Pho_1215.jpg" "Pho_1229.jpg"
## [25] "Pho_1251.jpg" "Pho_1253.jpg" "Pho_1264.jpg" "Pho_1268.jpg"
## [29] "Pho_1278.png" "Pho_1292.jpg"
+ image file : read, format to RGB, normalize and resize
+ 60 object Images for training
+ 30 object Images for testing
+ matrix file for training or testing
+ Categorize Object-images
trainme60 = c( (1:20 %/% 1:20)*0 , ((1:20 %/% 1:20))*1 , ((1:20 %/% 1:20))+ 1 )
testme30 = c( (1:10 %/% 1:10)*0 , ((1:10 %/% 1:10))*1 , ((1:10 %/% 1:10))+ 1 )
trainLabels60 = to_categorical(as.array(trainme60) )
testLabels30 = to_categorical(as.array(testme30) )
+ Construct CNN Model
model = keras_model_sequential()
model %>%
layer_conv_2d(filters = 32,
kernel_size = c(3,3),
activation = "relu",
input_shape = c(100,100,3)) %>%
layer_conv_2d(filters = 32,
kernel_size = c(3,3),
activation = "relu") %>%
layer_max_pooling_2d(pool_size = c(2,2)) %>%
layer_dropout(rate = 0.25) %>%
layer_conv_2d(filters = 64,
kernel_size = c(3,3),
activation = "relu") %>%
layer_conv_2d(filters = 64,
kernel_size = c(3,3),
activation = "relu") %>%
layer_max_pooling_2d(pool_size = c(2,2)) %>%
layer_dropout(rate = 0.25) %>%
layer_flatten() %>%
layer_dense(units = 256, activation = "relu")%>%
layer_dropout(rate=0.25)%>%
layer_dense(units = 3, activation = "softmax") %>%
compile(loss = "categorical_crossentropy",
optimizer = optimizer_sgd(lr = 0.01,
decay =1e-6,
momentum = 0.9,
nesterov=T),
metrics = c("accuracy"))
summary(model)
## ___________________________________________________________________________
## Layer (type) Output Shape Param #
## ===========================================================================
## conv2d (Conv2D) (None, 98, 98, 32) 896
## ___________________________________________________________________________
## conv2d_1 (Conv2D) (None, 96, 96, 32) 9248
## ___________________________________________________________________________
## max_pooling2d (MaxPooling2D) (None, 48, 48, 32) 0
## ___________________________________________________________________________
## dropout (Dropout) (None, 48, 48, 32) 0
## ___________________________________________________________________________
## conv2d_2 (Conv2D) (None, 46, 46, 64) 18496
## ___________________________________________________________________________
## conv2d_3 (Conv2D) (None, 44, 44, 64) 36928
## ___________________________________________________________________________
## max_pooling2d_1 (MaxPooling2D) (None, 22, 22, 64) 0
## ___________________________________________________________________________
## dropout_1 (Dropout) (None, 22, 22, 64) 0
## ___________________________________________________________________________
## flatten (Flatten) (None, 30976) 0
## ___________________________________________________________________________
## dense (Dense) (None, 256) 7930112
## ___________________________________________________________________________
## dropout_2 (Dropout) (None, 256) 0
## ___________________________________________________________________________
## dense_1 (Dense) (None, 3) 771
## ===========================================================================
## Total params: 7,996,451
## Trainable params: 7,996,451
## Non-trainable params: 0
## ___________________________________________________________________________
+ fit model : first run
TrainResult60 = model %>%
fit(traincomb_FHP_df ,
trainLabels60,
epochs = 50,
batch_size = 60,
validation_split = 0.2 )
plot(TrainResult60)
+ fit model : second run
TrainResult60 = model %>%
fit(traincomb_FHP_df ,
trainLabels60,
epochs = 50,
batch_size = 60,
validation_split = 0.2 )
plot(TrainResult60)
+ fit model : third run
TrainResult60 = model %>%
fit(traincomb_FHP_df ,
trainLabels60,
epochs = 50,
batch_size = 60,
validation_split = 0.2 )
plot(TrainResult60)
+ fit model : fourth run
TrainResult60 = model %>%
fit(traincomb_FHP_df ,
trainLabels60,
epochs = 50,
batch_size = 60,
validation_split = 0.2 )
plot(TrainResult60)
+ evaluation and prediction for train data
model %>% evaluate(traincomb_FHP_df, trainLabels60)
## $loss
## [1] 0.5420191
##
## $acc
## [1] 0.9166667
pred = model %>% predict_classes(traincomb_FHP_df)
tab60 = table(PredictCls = pred, ActualCls = trainme60)
tab60
## ActualCls
## PredictCls 0 1 2
## 0 20 0 5
## 1 0 20 0
## 2 0 0 15
Actualobj = trainme60
Actualobj[trainme60 == "0"] = "Flyer"
Actualobj[trainme60 == "1"] = "HFace"
Actualobj[trainme60 == "2"] = "Phone"
prob = model %>% predict_proba(traincomb_FHP_df)
predtrain.df = data.frame(cbind(1:60, round(prob, 4)*100, PredCls = pred, ActuCls = trainme60))
colnames(predtrain.df) = c( "Index", "Prob_Flyer" , "Prob_Face" , "Prob_Phone" , "PredCls", "ActuCls" )
predtrain.df["ActuObjs"] = Actualobj
| Index | Prob_Flyer | Prob_Face | Prob_Phone | PredCls | ActuCls | ActuObjs |
|---|---|---|---|---|---|---|
| 1 | 99.99 | 0.00 | 0.01 | 0 | 0 | Flyer |
| 2 | 99.98 | 0.00 | 0.02 | 0 | 0 | Flyer |
| 3 | 99.40 | 0.04 | 0.56 | 0 | 0 | Flyer |
| 4 | 99.50 | 0.00 | 0.50 | 0 | 0 | Flyer |
| 5 | 99.99 | 0.01 | 0.00 | 0 | 0 | Flyer |
| 6 | 99.86 | 0.00 | 0.14 | 0 | 0 | Flyer |
| 7 | 100.00 | 0.00 | 0.00 | 0 | 0 | Flyer |
| 8 | 96.11 | 3.50 | 0.39 | 0 | 0 | Flyer |
| 9 | 99.44 | 0.34 | 0.22 | 0 | 0 | Flyer |
| 10 | 99.99 | 0.00 | 0.01 | 0 | 0 | Flyer |
| 11 | 100.00 | 0.00 | 0.00 | 0 | 0 | Flyer |
| 12 | 97.17 | 1.51 | 1.33 | 0 | 0 | Flyer |
| 13 | 91.23 | 2.25 | 6.52 | 0 | 0 | Flyer |
| 14 | 98.22 | 0.10 | 1.67 | 0 | 0 | Flyer |
| 15 | 99.97 | 0.01 | 0.01 | 0 | 0 | Flyer |
| 16 | 99.97 | 0.00 | 0.03 | 0 | 0 | Flyer |
| 17 | 94.11 | 0.58 | 5.31 | 0 | 0 | Flyer |
| 18 | 99.99 | 0.00 | 0.01 | 0 | 0 | Flyer |
| 19 | 100.00 | 0.00 | 0.00 | 0 | 0 | Flyer |
| 20 | 100.00 | 0.00 | 0.00 | 0 | 0 | Flyer |
| 21 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 22 | 0.01 | 99.99 | 0.00 | 1 | 1 | HFace |
| 23 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 24 | 0.02 | 99.98 | 0.00 | 1 | 1 | HFace |
| 25 | 0.18 | 99.82 | 0.00 | 1 | 1 | HFace |
| 26 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 27 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 28 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 29 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 30 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 31 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 32 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 33 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 34 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 35 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 36 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 37 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 38 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 39 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 40 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 41 | 0.22 | 0.00 | 99.78 | 2 | 2 | Phone |
| 42 | 0.39 | 0.00 | 99.61 | 2 | 2 | Phone |
| 43 | 0.05 | 0.00 | 99.95 | 2 | 2 | Phone |
| 44 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 45 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 46 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 47 | 0.25 | 0.00 | 99.75 | 2 | 2 | Phone |
| 48 | 0.01 | 0.00 | 99.99 | 2 | 2 | Phone |
| 49 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 50 | 0.03 | 0.00 | 99.97 | 2 | 2 | Phone |
| 51 | 40.54 | 0.00 | 59.46 | 2 | 2 | Phone |
| 52 | 100.00 | 0.00 | 0.00 | 0 | 2 | Phone |
| 53 | 96.23 | 3.76 | 0.01 | 0 | 2 | Phone |
| 54 | 97.76 | 0.00 | 2.24 | 0 | 2 | Phone |
| 55 | 94.61 | 0.28 | 5.11 | 0 | 2 | Phone |
| 56 | 0.76 | 0.00 | 99.24 | 2 | 2 | Phone |
| 57 | 2.51 | 0.00 | 97.49 | 2 | 2 | Phone |
| 58 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 59 | 86.37 | 0.26 | 13.37 | 0 | 2 | Phone |
| 60 | 38.77 | 13.83 | 47.40 | 2 | 2 | Phone |
+ evaluation and prediction - test data
model %>% evaluate(testcomb_FHP_df, testLabels30)
## $loss
## [1] 1.492401
##
## $acc
## [1] 0.8666667
pred = model %>% predict_classes(testcomb_FHP_df)
tab30 = table(PredictCls = pred, ActualCls = testme30)
tab30
## ActualCls
## PredictCls 0 1 2
## 0 10 0 4
## 1 0 10 0
## 2 0 0 6
Actualobj = testme30
Actualobj[testme30 == "0"] = "Flyer"
Actualobj[testme30 == "1"] = "HFace"
Actualobj[testme30 == "2"] = "Phone"
prob = model %>% predict_proba(testcomb_FHP_df)
predtest.df = data.frame(1:30, cbind(round(prob, 4)*100, PredictCls = pred, ActualCls = testme30) )
colnames(predtest.df) = c("Index", "Prob_Flyer" , "Prob_Face" , "Prob_Phone" , "PredCls", "ActuCls" )
predtest.df["ActuObjs"] = Actualobj
| Index | Prob_Flyer | Prob_Face | Prob_Phone | PredCls | ActuCls | ActuObjs |
|---|---|---|---|---|---|---|
| 1 | 99.98 | 0.00 | 0.02 | 0 | 0 | Flyer |
| 2 | 89.12 | 10.81 | 0.07 | 0 | 0 | Flyer |
| 3 | 98.34 | 0.04 | 1.62 | 0 | 0 | Flyer |
| 4 | 89.23 | 10.75 | 0.02 | 0 | 0 | Flyer |
| 5 | 99.71 | 0.28 | 0.02 | 0 | 0 | Flyer |
| 6 | 99.70 | 0.29 | 0.01 | 0 | 0 | Flyer |
| 7 | 96.56 | 3.44 | 0.00 | 0 | 0 | Flyer |
| 8 | 100.00 | 0.00 | 0.00 | 0 | 0 | Flyer |
| 9 | 99.97 | 0.02 | 0.01 | 0 | 0 | Flyer |
| 10 | 99.19 | 0.81 | 0.00 | 0 | 0 | Flyer |
| 11 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 12 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 13 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 14 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 15 | 1.36 | 98.64 | 0.00 | 1 | 1 | HFace |
| 16 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 17 | 1.70 | 98.29 | 0.00 | 1 | 1 | HFace |
| 18 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 19 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 20 | 0.00 | 100.00 | 0.00 | 1 | 1 | HFace |
| 21 | 38.93 | 0.00 | 61.07 | 2 | 2 | Phone |
| 22 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 23 | 0.06 | 0.00 | 99.94 | 2 | 2 | Phone |
| 24 | 0.00 | 0.00 | 100.00 | 2 | 2 | Phone |
| 25 | 98.53 | 0.00 | 1.47 | 0 | 2 | Phone |
| 26 | 9.45 | 0.00 | 90.55 | 2 | 2 | Phone |
| 27 | 100.00 | 0.00 | 0.00 | 0 | 2 | Phone |
| 28 | 100.00 | 0.00 | 0.00 | 0 | 2 | Phone |
| 29 | 3.25 | 0.00 | 96.75 | 2 | 2 | Phone |
| 30 | 100.00 | 0.00 | 0.00 | 0 | 2 | Phone |