Untitled
unknown
plain_text
3 years ago
8.4 kB
7
Indexable
#%% # -*- coding: utf-8 -*- from matplotlib.pyplot import imshow import matplotlib.cm as cm import matplotlib.pylab as plt from keras.preprocessing.image import ImageDataGenerator import numpy as np import PIL from PIL import ImageFilter import cv2 import itertools import random from keras.preprocessing.image import img_to_array from sklearn.model_selection import train_test_split from tensorflow.keras.utils import to_categorical from keras import callbacks from keras.models import Sequential from tensorflow.keras.layers import ( BatchNormalization ) from keras.layers import Dense, Dropout, Flatten import keras import imutils from imutils import paths import os from tensorflow.keras import optimizers from keras.layers import Conv2D, MaxPooling2D , UpSampling2D ,Conv2DTranspose from keras import backend as K #%% ################# Define pil image method def pil_image(img_path): pil_im =PIL.Image.open(img_path).convert('L') pil_im=pil_im.resize((105,105)) imshow(np.asarray(pil_im)) return pil_im ################# define noise image method def noise_image(pil_im): # Adding Noise to image img_array = np.asarray(pil_im) mean = 0.0 # some constant std = 5 # some constant (standard deviation) noisy_img = img_array + np.random.normal(mean, std, img_array.shape) noisy_img_clipped = np.clip(noisy_img, 0, 255) noise_img = PIL.Image.fromarray(np.uint8(noisy_img_clipped)) # output #imshow((noisy_img_clipped ).astype(np.uint8)) noise_img=noise_img.resize((105,105)) return noise_img ################# Define blur image method def blur_image(pil_im): #Adding Blur to image blur_img = pil_im.filter(ImageFilter.GaussianBlur(radius=3)) # output imshow(blur_img) blur_img = blur_img.resize((105, 105)) return blur_img ################# define affine rotation method def affine_rotation(img): #img=cv2.imread(img_path,0) rows, columns = img.shape point1 = np.float32([[10, 10], [30, 10], [10, 30]]) point2 = np.float32([[20, 15], [40, 10], [20, 40]]) A = cv2.getAffineTransform(point1, point2) output = cv2.warpAffine(img, A, (columns, rows)) affine_img = PIL.Image.fromarray(np.uint8(output)) # affine rotated output imshow(output) affine_img=affine_img.resize((105,105)) return affine_img ################# define gradient fill method def gradient_fill(image): #image=cv2.imread(img_path,0) laplacian = cv2.Laplacian(image,cv2.CV_64F) laplacian = cv2.resize(laplacian, (105, 105)) return laplacian #%% ################# get path data_path = "C:/Users/Lejla/Desktop/Dataset/test" data=[] labels=[] imagePaths = sorted(list(paths.list_images(data_path))) random.seed(42) random.shuffle(imagePaths) ##print(imagePaths); ################# Define labels for model def conv_label(label): if label == 'Pacifico': return 0 elif label == 'DroidSans': return 1 elif label == 'Roboto-Regular': return 2 elif label == 'Raleway-Medium': return 3 ################# Define methods augument=["blur","noise","affine","gradient"] a=itertools.combinations(augument, 4) ##for i in list(a): ## print(list(i)) ################# Handling font_patch images with previously defined methods counter=0 for imagePath in imagePaths: label = imagePath.split(os.path.sep)[-2] label = conv_label(label) pil_img = pil_image(imagePath) ## imshow(pil_img) # Adding original image org_img = img_to_array(pil_img) #print(org_img.shape) data.append(org_img) labels.append(label) augument=["noise","blur","affine","gradient"] for l in range(0,len(augument)): a=itertools.combinations(augument, l+1) for i in list(a): combinations=list(i) ## print(len(combinations)) temp_img = pil_img for j in combinations: if j == 'noise': # Adding Noise image temp_img = noise_image(temp_img) elif j == 'blur': # Adding Blur image temp_img = blur_image(temp_img) #imshow(blur_img) elif j == 'affine': open_cv_affine = np.array(pil_img) # Adding affine rotation image temp_img = affine_rotation(open_cv_affine) elif j == 'gradient': open_cv_gradient = np.array(pil_img) # Adding gradient image temp_img = gradient_fill(open_cv_gradient) temp_img = img_to_array(temp_img) data.append(temp_img) labels.append(label) ################# Preparing data for model creation data = np.asarray(data, dtype="float") / 255.0 labels = np.array(labels) print("Success") # partition the data into training and testing splits using 75% of # the data for training and the remaining 25% for testing trainX, testX, trainY, testY = train_test_split(data, labels, test_size=0.25, random_state=42) nsamples, nx, ny, nz = trainX.shape d2_trainX = trainX.reshape((nsamples, nx*ny*nz)) nsamples, nx, ny, nz = testX.shape d2_testX = testX.reshape((nsamples, nx*ny*nz)) ################# # convert the labels from integers to vectors ##trainY = to_categorical(trainY, num_classes=4) ##testY = to_categorical(testY, num_classes=4) ################# augtment aug = ImageDataGenerator(rotation_range=30, width_shift_range=0.1,height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,horizontal_flip=True) #%% from sklearn.model_selection import cross_val_score, GridSearchCV, RandomizedSearchCV import pandas as pd import time def search(pipeline, parameters, X_train, y_train, X_test, y_test, optimizer='grid_search', n_iter=None): start = time.time() if optimizer == 'grid_search': grid_obj = GridSearchCV(estimator=pipeline, param_grid=parameters, cv=5, refit=True, return_train_score=False, scoring = 'accuracy', ) grid_obj.fit(X_train, y_train,) elif optimizer == 'random_search': grid_obj = RandomizedSearchCV(estimator=pipeline, param_distributions=parameters, cv=5, n_iter=n_iter, refit=True, return_train_score=False, scoring = 'accuracy', random_state=1) grid_obj.fit(X_train, y_train,) else: print('enter search method') return estimator = grid_obj.best_estimator_ cvs = cross_val_score(estimator, X_train, y_train, cv=5) results = pd.DataFrame(grid_obj.cv_results_) print("##### Results") print("Score best parameters: ", grid_obj.best_score_) print("Best parameters: ", grid_obj.best_params_) print("Cross-validation Score: ", cvs.mean()) print("Test Score: ", estimator.score(X_test, y_test)) print("Time elapsed: ", time.time() - start) print("Parameter combinations evaluated: ",results.shape[0]) return results, estimator #%% import lightgbm as lgb import numpy as np from sklearn import pipeline from hyperopt import hp pipe = pipeline.Pipeline([ ('clf', lgb.LGBMClassifier()) ]) param_gridsearch = { 'clf__learning_rate' : [0.01, 0.1, 1], 'clf__max_depth' : [5, 10, 15], 'clf__n_estimators' : [5, 20, 35], 'clf__num_leaves' : [5, 25, 50], 'clf__boosting_type': ['gbdt', 'dart'], 'clf__colsample_bytree' : [0.6, 0.75, 1], 'clf__reg_lambda': [0.01, 0.1, 1], } param_random = { 'clf__learning_rate': list(np.logspace(np.log(0.01), np.log(1), num = 500, base=3)), 'clf__max_depth': list(range(5, 15)), 'clf__n_estimators': list(range(5, 35)), 'clf__num_leaves': list(range(5, 50)), 'clf__boosting_type': ['gbdt', 'dart'], 'clf__colsample_bytree': list(np.linspace(0.6, 1, 500)), 'clf__reg_lambda': list(np.linspace(0, 1, 500)), } #%% results_grid, estimator_grid = search(pipe, param_gridsearch, d2_trainX, trainY, d2_testX, testY, 'grid_search')
Editor is loading...