Advertisement
Guest User

Untitled

a guest
Jan 15th, 2022
380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.74 KB | None | 0 0
  1. #Training
  2. import warnings
  3. warnings.filterwarnings('ignore')
  4. import cv2
  5. import numpy as np
  6. import os
  7. import matplotlib.pyplot as plt
  8. from sklearn.model_selection import train_test_split
  9. from keras.preprocessing.image import ImageDataGenerator
  10. from keras.utils.np_utils import to_categorical
  11. from keras.models import Sequential
  12. from keras.layers import Conv2D, Dense, MaxPooling2D, Activation, Dropout, Flatten
  13. from tensorflow.keras.optimizers import Adam
  14. ########################################
  15.  
  16. path= r'C:\Users\adamt\Desktop\dataset\New_one_pence_two_Pence'
  17. images=[]
  18. classNo=[]
  19. testRatio=0.2
  20. valRatio=0.2
  21. imgDimension=(255,255,3)
  22.  
  23. #########################################
  24.  
  25. myList=os.listdir(path)
  26.  
  27. numOfClasses=len(myList)
  28.  
  29. print(numOfClasses)
  30.  
  31. print("Importing Classes..........")
  32. for x in range(0, numOfClasses):
  33.     myPicList=os.listdir(path+"/"+str(x))
  34.     # myData/0/img.jpg
  35.     for y in myPicList:
  36.         curImg=cv2.imread(path+"/"+str(x)+"/"+y)
  37.         curImg=cv2.resize(curImg,(imgDimension[0],imgDimension[1]))
  38.         images.append(curImg)
  39.         classNo.append(x)
  40.     print(x)
  41.  
  42. images=np.array(images)
  43. classNo=np.array(classNo)
  44.  
  45.  
  46.  
  47.  
  48. #########Spliting The Data###########
  49.  
  50. x_train, x_test, y_train, y_test=train_test_split(images, classNo, test_size=testRatio)
  51. x_train, x_validation, y_train, y_validation=train_test_split(x_train, y_train, test_size=valRatio)
  52.  
  53.  
  54. # # print(x_train.shape)
  55.  
  56. numOfSample=[]
  57.  
  58. for x in range(0,numOfClasses):
  59.     numOfSample.append(len(np.where(y_train==x)[0]))
  60.  
  61.  
  62. plt.figure(figsize=(10,5))
  63. plt.bar(range(0, numOfClasses),numOfSample)
  64. plt.title("Bar Plot of Classes & Images")
  65. plt.xlabel("No Of Classes")
  66. plt.ylabel("No of Images")
  67. plt.show()
  68.  
  69.  
  70. def preprocessing(img):
  71.     # img=np.astype("uint8")
  72.     img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  73.     img=cv2.equalizeHist(img)
  74.     img=img/255
  75.     return img
  76.  
  77.  
  78. x_train=np.array(list(map(preprocessing, x_train)))
  79. x_test=np.array(list(map(preprocessing, x_test)))
  80. x_validation=np.array(list(map(preprocessing, x_validation)))
  81.  
  82.  
  83.  
  84.  
  85.  
  86. x_train=x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2],1)
  87. x_test=x_test.reshape(x_test.shape[0], x_test.shape[1], x_test.shape[2],1)
  88. x_validation=x_validation.reshape(x_validation.shape[0], x_validation.shape[1], x_validation.shape[2],1)
  89.  
  90.  
  91. dataGen=ImageDataGenerator(
  92.     width_shift_range=0.0,
  93.     height_shift_range=0.0,
  94.     zoom_range=0.0,
  95.     shear_range=0.0,
  96.     rotation_range=0)
  97.  
  98. dataGen.fit(x_train)
  99.  
  100. y_train=to_categorical(y_train, numOfClasses)
  101. y_test=to_categorical(y_test, numOfClasses)
  102. y_validation=to_categorical(y_validation, numOfClasses)
  103.  
  104.  
  105. def myModel():
  106.     sizeOfFilter1=(3,3)
  107.     sizeOfFilter2=(3,3)
  108.     sizeOfPool=(2,2)
  109.  
  110.     model=Sequential()
  111.     model.add((Conv2D(32, sizeOfFilter1, input_shape=(imgDimension[0],imgDimension[1],1),activation='relu')))
  112.     model.add((Conv2D(32, sizeOfFilter1,activation='relu')))
  113.     model.add(MaxPooling2D(pool_size=sizeOfPool))
  114.  
  115.     model.add((Conv2D(64, sizeOfFilter2,activation='relu')))
  116.     model.add((Conv2D(64, sizeOfFilter2,activation='relu')))
  117.     model.add(MaxPooling2D(pool_size=sizeOfPool))
  118.     model.add(Dropout(0.5))
  119.  
  120.  
  121.     model.add(Flatten())
  122.     model.add(Dense(64, activation='relu'))
  123.     model.add(Dropout(0.5))
  124.     model.add(Dense(numOfClasses, activation='softmax'))
  125.     model.compile(Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
  126.     return model
  127.  
  128. model=myModel()
  129. print(model.summary())
  130.  
  131. history=model.fit_generator(dataGen.flow(x_train, y_train,batch_size=32),
  132.     steps_per_epoch=2,                                                  #https://chowdera.com/2022/01/202201090452117647.html ammount of images devided by batch size, only need to do for 1 folder5
  133.     epochs=45, validation_data=(x_validation,y_validation),shuffle=5)
  134.  
  135. model.save("New_One_Pence_Two_Pence_T50.model")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement