def testingCNN(self, img_test): print("Proses") bar = progressbar.ProgressBar(maxval=2, widgets=[ progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage() ]) bar.start() ## Panggil filter 12345 filter_load = np.load("bobot/filter.npz") l1_filter = filter_load['f1'] l2_filter = filter_load['f2'] # l3_filter = filter_load['f3'] # l4_filter = filter_load['f4'] # l5_filter = filter_load['f5'] ## Panggil bobot+bias bobot_simpan = np.load("bobot/0,000125/bobot200.npz") weight = bobot_simpan['bobot'] bias = bobot_simpan['biass'] ## Layer 1 ## # C1 # l1_feature_map = numpycnn.conv(img_test, l1_filter) l1_feature_map_relu = numpycnn.relu(l1_feature_map) # S1 # l1_feature_map_relu_pool = numpycnn.pooling(l1_feature_map_relu) bar.update(1) time.sleep(0.1) ## Layer 2 ## # C2 # l2_feature_map = numpycnn.conv(l1_feature_map_relu_pool, l2_filter) l2_feature_map_relu = numpycnn.relu(l2_feature_map) # S2 # l2_feature_map_relu_pool = numpycnn.pooling(l2_feature_map_relu) bar.update(2) time.sleep(0.1) # ## Layer 3 ## # # C3 # # l3_feature_map = numpycnn.conv(l2_feature_map_relu_pool, l3_filter) # l3_feature_map_relu = numpycnn.relu(l3_feature_map) # # # S3 # # l3_feature_map_relu_pool = numpycnn.pooling(l3_feature_map_relu) # # bar.update(3) # time.sleep(0.1) # # ## Layer 4 ## # # C4 # # l4_feature_map = numpycnn.conv(l3_feature_map_relu_pool, l4_filter) # l4_feature_map_relu = numpycnn.relu(l4_feature_map) # # # S4 # # l4_feature_map_relu_pool = numpycnn.pooling(l4_feature_map_relu) # # bar.update(4) # time.sleep(0.1) # # ## Layer 5 ## # # C5 # # l5_feature_map = numpycnn.conv(l4_feature_map_relu_pool, l5_filter) # l5_feature_map_relu = numpycnn.relu(l5_feature_map) # npad = ((0,1), (0,1), (0,0)) # l5_feature_map_relu = np.pad(l5_feature_map_relu, pad_width=npad, mode='constant', constant_values=0) # # # S5 # # l5_feature_map_relu_pool = numpycnn.pooling(l5_feature_map_relu) # # bar.update(5) # time.sleep(0.1) bar.finish() ### Vektorisasi ### vektor = np.zeros((4, 1, 5184)) for i in range(0, 4): vektor[i, :, :] = l2_feature_map_relu_pool[:, :, i].flatten() flatten = np.reshape(vektor, 20736).flatten() flatten = flatten.reshape((-1, 1)) ### Fully-connected ### kelas = ["Optimis", "Pesimis", "Seimbang"] fully = [] for i in range(0, len(kelas)): fully.append(np.sum(flatten * weight[i, :]) + bias[i]) ## Exponensial ## eksponen = [] for i in range(0, len(kelas)): eksponen.append(math.exp(fully[i])) ## Softmax ## softmax = [] for i in range(0, len(kelas)): softmax.append(eksponen[i] / sum(eksponen)) print("\n") # print("--> Hasil prediksi :",softmax) print("Maka, kepribadian yang diprediksi adalah :", kelas[np.argmax(softmax)]) self.label.setText(kelas[np.argmax(softmax)])
def trainingCNN(self): ## Timer ## start = time.time() # ##### Siapin Data ##### training_data = [] DATADIR = "D:/Datasets/Benar/TulisanTanganTest/" CATEGORIES = ["Optimis", "Pesimis", "Seimbang"] list1 = os.listdir(os.path.join(DATADIR, "Optimis")) list2 = os.listdir(os.path.join(DATADIR, "Pesimis")) list3 = os.listdir(os.path.join(DATADIR, "Seimbang")) jumlah_file = len(list1) + len(list2) + len(list3) print("Preprocessing") print(jumlah_file) bar = progressbar.ProgressBar(maxval=50, widgets=[ progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage() ]) bar.start() x = 0 for category in CATEGORIES: path = os.path.join( DATADIR, category) # Ambil Folder Kelas['Optimis','Pesimis','Seimbang'] class_num = CATEGORIES.index(category) for gambar in os.listdir(path): img = cv2.imread(os.path.join(path, gambar)) gray = self.grayscale(img) thres = self.threshold(gray) crop = self.segmentasi(thres, img) res = self.resize(crop) training_data.append([res, class_num]) random.shuffle(training_data) bar.update(x + 1) time.sleep(0.1) x = x + 1 bar.finish() end = time.time() cetak = "Lamanya Proses : " + str(int(round(end - start))) + "s" self.textBrowser.append(cetak) # Split data training X = [] y = [] for features, label in training_data: X.append(features) y.append(label) for i in range(0, len(y)): ohl = [0, 0, 0] ohl[y[i]] = 1 y[i] = ohl y = np.array(y) # np.savez("bobot/draft/data.npz", matriks=X, label=y) # data_load = np.load("bobot/data.npz") # X = data_load['matriks'] # y = data_load['label'] # print(y) ##### END ##### ##### CNN ##### #### Inisialisasi Awal #### ## Panggil bobot awal ## Panggil filter 12345 filter_load = np.load("bobot/filter.npz") l1_filter = filter_load['f1'] l2_filter = filter_load['f2'] # l3_filter = filter_load['f3'] # l4_filter = filter_load['f4'] # l5_filter = filter_load['f5'] ## Panggil weight # weight = np.load("bobot/weight_awal.npy") weight = np.zeros((3, 20736, 1)) for i in range(0, 2): for j in range(0, 20735): angka = round(random.uniform(-0.05, 0.05), 2) weight[i, j, :] = angka ## Panggil Flatten flatten = np.load("bobot/flatten.npy") #### Feedforward #### print("Training CNN") # bar.start() x = 0 bias = [0, 0, 0] epoch = 200 lrate = 0.000125 for ep in range(0, epoch): for image_i in range(0, len(X)): cetak = "Input Ke-" + str(image_i + 1) print(cetak) self.textBrowser.append(cetak) ### Layer 1 ### # C1 l1_feature_map = numpycnn.conv(X[image_i], l1_filter) l1_feature_map_relu = numpycnn.relu(l1_feature_map) # S1 l1_feature_map_relu_pool = numpycnn.pooling( l1_feature_map_relu) # ### Layer 2 ### # C2 l2_feature_map = numpycnn.conv(l1_feature_map_relu_pool, l2_filter) l2_feature_map_relu = numpycnn.relu(l2_feature_map) # S2 l2_feature_map_relu_pool = numpycnn.pooling( l2_feature_map_relu) # ### Layer 3 ### # # C3 # l3_feature_map = numpycnn.conv(l2_feature_map_relu_pool, l3_filter) # l3_feature_map_relu = numpycnn.relu(l3_feature_map) # # # S3 # l3_feature_map_relu_pool = numpycnn.pooling(l3_feature_map_relu) # # ### Layer 4 ### # # C4 # l4_feature_map = numpycnn.conv(l3_feature_map_relu_pool, l4_filter) # l4_feature_map_relu = numpycnn.relu(l4_feature_map) # # # S4 # l4_feature_map_relu_pool = numpycnn.pooling(l4_feature_map_relu) # # ### Layer 5 ### # # C5 # l5_feature_map = numpycnn.conv(l4_feature_map_relu_pool, l5_filter) # l5_feature_map_relu = numpycnn.relu(l5_feature_map) # npad = ((0,1), (0,1), (0,0)) # l5_feature_map_relu = np.pad(l5_feature_map_relu, pad_width=npad, mode='constant', constant_values=0) # # # S5 # l5_feature_map_relu_pool = numpycnn.pooling(l5_feature_map_relu) # ### Vektorisasi ### vektor = np.zeros((4, 1, 5184)) for i in range(0, 4): vektor[i, :, :] = l2_feature_map_relu_pool[:, :, i].flatten() flatten = np.reshape(vektor, 20736).flatten() flatten = flatten.reshape((-1, 1)) flatten_simpan.append(flatten) ### Fully-connected ### kelas = 3 fully = [] for i in range(0, kelas): fully.append( np.sum(flatten[image_i] * weight[i, :]) + bias[i]) ## Exponensial ## eksponen = [] for i in range(0, kelas): eksponen.append(math.exp(fully[i])) ## Softmax ## softmax = [] for i in range(0, kelas): softmax.append(eksponen[i] / sum(eksponen)) ## Cross-entropy Loss ## ohl = y[image_i] loss = [] terror = 0.00001 for i in range(0, kelas): loss.append(ohl[i] * math.log10(softmax[i])) loss = sum(loss) * -1 ## Backpropagation ## if loss > terror: cetak = "-> epoch ke" + str(ep + 1) print(cetak) self.textBrowser.append(cetak) delta_y = [] for i in range(0, kelas): delta_y.append(softmax[i] - ohl[i]) delta_w = np.zeros((kelas, flatten[image_i].shape[0])) for i in range(0, kelas): for j in range(0, flatten[image_i].shape[0]): delta_w[i, j] = delta_y[i] * flatten[image_i][j] delta_b = delta_y ## SGD ## weight_baru = np.zeros_like(weight) for i in range(0, kelas): for j in range(0, weight.shape[1]): weight_baru[i, j] = weight[i, j] - (lrate * delta_w[i, j]) weight = weight_baru bias_baru = bias for i in range(0, kelas): bias_baru[i] = bias[i] - (lrate * delta_b[i]) bias = bias_baru # FULLY LAGI # fully = [] for i in range(0, kelas): fully.append( np.sum(flatten[image_i] * weight[i, :]) + bias[i]) ## Exponensial ## eksponen = [] for i in range(0, kelas): eksponen.append(math.exp(fully[i])) ## Softmax ## softmax = [] for i in range(0, kelas): softmax.append(eksponen[i] / sum(eksponen)) cetak = "--> Softmax" + str(softmax) print(cetak) self.textBrowser.append(cetak) # np.savez("bobot/filter.npz",f1=l1_filter, f2=l2_filter, f3=l3_filter, f4=l4_filter, f5=l5_filter) # lokasi_weight = "bobot/0,000125/bobot" + str(ep + 1) + ".npz" # # np.savez(lokasi_weight, bobot=weight, biass=bias) # if(ep+1 == 50): # np.save("bobot/0,001/ep50/weight.npy", weight) # np.save("bobot/0,001/ep50/bias.npy", bias) # elif(ep+1 == 100): # np.save("bobot/0,001/ep100/weight.npy", weight) # np.save("bobot/0,001/ep100/bias.npy", bias) # elif(ep+1 == 150): # np.save("bobot/0,001/ep150/weight.npy", weight) # np.save("bobot/0,001/ep150/bias.npy", bias) # elif(ep+1 == 200): # np.save("bobot/0,001/ep200/weight.npy", weight) # np.save("bobot/0,001/ep200/bias.npy", bias) # elif(ep+1 == 250): # np.save("bobot/0,000125/ep250/weight.npy", weight) # np.save("bobot/0,000125/ep250/bias.npy", bias) bar.update(x + 1) time.sleep(0.1) x = x + 1 bar.finish() end = time.time() cetak = "Lamanya Proses : " + str(int(round(end - start))) + "s" print(cetak) self.textBrowser.append(cetak)
def cnn_example(self, numpy_img, layer=1): if layer == 1: #**Working with conv layer 1** l1_filter = numpy.zeros((2, 3, 3)) l1_filter[0, :, :] = numpy.array([[[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]]]) l1_filter[1, :, :] = numpy.array([[[1, 1, 1], [0, 0, 0], [-1, -1, -1]]]) l1_feature_map = numpycnn.conv(numpy_img, l1_filter) im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 0])) im.save("conv1_filter1.png") im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 1])) im.save("conv1_filter2.png") l1_feature_map_relu = numpycnn.relu(l1_feature_map) im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 0])) im.save("conv1_relu1.png") im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 1])) im.save("conv1_relu2.png") l1_feature_map_relu_pool = numpycnn.pooling( l1_feature_map_relu, 2, 2) im = PIL.Image.fromarray( numpy.uint8(l1_feature_map_relu_pool[:, :, 0])) im.save("conv1_relu_pool1.png") im = PIL.Image.fromarray( numpy.uint8(l1_feature_map_relu_pool[:, :, 1])) im.save("conv1_relu_pool2.png") return l1_feature_map_relu_pool elif layer == 2: #**Working with conv layer 2** l2_filter = numpy.random.rand(3, 5, 5, numpy_img.shape[-1]) l2_feature_map = numpycnn.conv(numpy_img, l2_filter) im = PIL.Image.fromarray(numpy.uint8(l2_feature_map[:, :, 0])) im.save("conv2_filter1.png") im = PIL.Image.fromarray(numpy.uint8(l2_feature_map[:, :, 1])) im.save("conv2_filter2.png") im = PIL.Image.fromarray(numpy.uint8(l2_feature_map[:, :, 2])) im.save("conv2_filter3.png") l2_feature_map_relu = numpycnn.relu(l2_feature_map) im = PIL.Image.fromarray(numpy.uint8(l2_feature_map_relu[:, :, 0])) im.save("conv2_relu1.png") im = PIL.Image.fromarray(numpy.uint8(l2_feature_map_relu[:, :, 1])) im.save("conv2_relu2.png") im = PIL.Image.fromarray(numpy.uint8(l2_feature_map_relu[:, :, 2])) im.save("conv2_relu3.png") l2_feature_map_relu_pool = numpycnn.pooling( l2_feature_map_relu, 2, 2) im = PIL.Image.fromarray( numpy.uint8(l2_feature_map_relu_pool[:, :, 0])) im.save("conv2_relu_pool1.png") im = PIL.Image.fromarray( numpy.uint8(l2_feature_map_relu_pool[:, :, 1])) im.save("conv2_relu_pool2.png") im = PIL.Image.fromarray( numpy.uint8(l2_feature_map_relu_pool[:, :, 2])) im.save("conv2_relu_pool3.png") return l2_feature_map_relu_pool elif layer == 0: #0 corresponds to layer 3 #**Working with conv layer 3** l3_filter = numpy.random.rand(1, 7, 7, numpy_img.shape[-1]) l3_feature_map = numpycnn.conv(numpy_img, l3_filter) im = PIL.Image.fromarray(numpy.uint8(l3_feature_map[:, :, 0])) im.save("conv3_filter1.png") l3_feature_map_relu = numpycnn.relu(l3_feature_map) im = PIL.Image.fromarray(numpy.uint8(l3_feature_map_relu[:, :, 0])) im.save("conv3_relu1.png") l3_feature_map_relu_pool = numpycnn.pooling( l3_feature_map_relu, 2, 2) im = PIL.Image.fromarray( numpy.uint8(l3_feature_map_relu_pool[:, :, 0])) im.save("conv3_relu_pool1.png") return l3_feature_map_relu_pool
# Converting the image into gray. img = color.rgb2gray(img) # First conv layer # l1_filter = numpy.random.rand(2,7,7)*20 # Preparing the filters randomly. l1_filter = numpy.zeros((2, 3, 3)) l1_filter[0, :, :] = numpy.array([[[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]]]) l1_filter[1, :, :] = numpy.array([[[1, 1, 1], [0, 0, 0], [-1, -1, -1]]]) print("\n**Working with conv layer 1**") l1_feature_map = numpycnn.conv(img, l1_filter) print("\n**ReLU**") l1_feature_map_relu = numpycnn.relu(l1_feature_map) print("\n**Pooling**") l1_feature_map_relu_pool = numpycnn.pooling(l1_feature_map_relu, 2, 2) print("**End of conv layer 1**\n") # Second conv layer l2_filter = numpy.random.rand(3, 5, 5, l1_feature_map_relu_pool.shape[-1]) print("\n**Working with conv layer 2**") l2_feature_map = numpycnn.conv(l1_feature_map_relu_pool, l2_filter) print("\n**ReLU**") l2_feature_map_relu = numpycnn.relu(l2_feature_map) print("\n**Pooling**") l2_feature_map_relu_pool = numpycnn.pooling(l2_feature_map_relu, 2, 2) print("**End of conv layer 2**\n") # Third conv layer l3_filter = numpy.random.rand(1, 7, 7, l2_feature_map_relu_pool.shape[-1]) print("\n**Working with conv layer 3**")
def cnn_example(self, numpy_img, layer=1): img1 = self.ids.img1 img2 = self.ids.img2 img3 = self.ids.img3 img4 = self.ids.img4 img5 = self.ids.img5 img6 = self.ids.img6 img7 = self.ids.img7 img8 = self.ids.img8 img9 = self.ids.img9 lbl1 = self.ids.lbl1 lbl2 = self.ids.lbl2 lbl3 = self.ids.lbl3 lbl4 = self.ids.lbl4 lbl5 = self.ids.lbl5 lbl6 = self.ids.lbl6 lbl7 = self.ids.lbl7 lbl8 = self.ids.lbl8 lbl9 = self.ids.lbl9 if layer == 1: #**Working with conv layer 1** l1_filter = numpy.zeros((2, 3, 3)) l1_filter[0, :, :] = numpy.array([[[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]]]) l1_filter[1, :, :] = numpy.array([[[1, 1, 1], [0, 0, 0], [-1, -1, -1]]]) l1_feature_map = numpycnn.conv(numpy_img, l1_filter) im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 0])) im.save("conv1_filter1.png") lbl2.text = "L1Map1" img2.source = "conv1_filter1.png" img2.reload() im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 1])) im.save("conv1_filter2.png") lbl3.text = "L1Map2" img3.source = "conv1_filter2.png" img3.reload() l1_feature_map_relu = numpycnn.relu(l1_feature_map) im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 0])) im.save("conv1_relu1.png") lbl4.text = "L1Map1ReLU" img4.source = "conv1_relu1.png" img4.reload() im = PIL.Image.fromarray(numpy.uint8(l1_feature_map[:, :, 1])) im.save("conv1_relu2.png") lbl5.text = "L1Map2ReLU" img5.source = "conv1_relu2.png" img5.reload() l1_feature_map_relu_pool = numpycnn.pooling( l1_feature_map_relu, 2, 2) im = PIL.Image.fromarray( numpy.uint8(l1_feature_map_relu_pool[:, :, 0])) im.save("conv1_relu_pool1.png") lbl6.text = "L1Map1ReLUPool" img6.source = "conv1_relu_pool1.png" img6.reload() im = PIL.Image.fromarray( numpy.uint8(l1_feature_map_relu_pool[:, :, 1])) im.save("conv1_relu_pool2.png") lbl7.text = "L1Map2ReLUPool" img7.source = "conv1_relu_pool2.png" img7.reload() return l1_feature_map_relu_pool elif layer == 2: #**Working with conv layer 2** l2_filter = numpy.random.rand(3, 5, 5, numpy_img.shape[-1]) l2_feature_map = numpycnn.conv(numpy_img, l2_filter) im = PIL.Image.fromarray(numpy.uint8(l2_feature_map[:, :, 0])) im.save("conv2_filter1.png") lbl1.text = "L2Map1" img1.source = "conv2_filter1.png" img1.reload() im = PIL.Image.fromarray(numpy.uint8(l2_feature_map[:, :, 1])) im.save("conv2_filter2.png") lbl2.text = "L2Map2" img2.source = "conv2_filter2.png" img2.reload() im = PIL.Image.fromarray(numpy.uint8(l2_feature_map[:, :, 2])) im.save("conv2_filter3.png") lbl3.text = "L2Map3" img3.source = "conv2_filter3.png" img3.reload() l2_feature_map_relu = numpycnn.relu(l2_feature_map) im = PIL.Image.fromarray(numpy.uint8(l2_feature_map_relu[:, :, 0])) im.save("conv2_relu1.png") lbl4.text = "L2Map1ReLU" img4.source = "conv2_relu1.png" img4.reload() im = PIL.Image.fromarray(numpy.uint8(l2_feature_map_relu[:, :, 1])) im.save("conv2_relu2.png") lbl5.text = "L2Map3ReLU" img5.source = "conv2_relu2.png" img5.reload() im = PIL.Image.fromarray(numpy.uint8(l2_feature_map_relu[:, :, 2])) im.save("conv2_relu3.png") lbl6.text = "L2Map3ReLU" img6.source = "conv2_relu3.png" img6.reload() l2_feature_map_relu_pool = numpycnn.pooling( l2_feature_map_relu, 2, 2) im = PIL.Image.fromarray( numpy.uint8(l2_feature_map_relu_pool[:, :, 0])) im.save("conv2_relu_pool1.png") lbl7.text = "L2Map1ReLU" img7.source = "conv2_relu_pool1.png" img7.reload() im = PIL.Image.fromarray( numpy.uint8(l2_feature_map_relu_pool[:, :, 1])) im.save("conv2_relu_pool2.png") lbl8.text = "L2Map2ReLU" img8.source = "conv2_relu_pool2.png" img8.reload() im = PIL.Image.fromarray( numpy.uint8(l2_feature_map_relu_pool[:, :, 2])) im.save("conv2_relu_pool3.png") lbl9.text = "L2Map3ReLU" img9.source = "conv2_relu_pool3.png" img9.reload() return l2_feature_map_relu_pool elif layer == 3: lbl1.text = "Original" img1.source = "input_image.jpg" img1.reload() #**Working with conv layer 3** l3_filter = numpy.random.rand(1, 7, 7, numpy_img.shape[-1]) l3_feature_map = numpycnn.conv(numpy_img, l3_filter) im = PIL.Image.fromarray(numpy.uint8(l3_feature_map[:, :, 0])) im.save("conv3_filter1.png") lbl2.text = "L3Map1" img2.source = "conv3_filter1.png" img2.reload() l3_feature_map_relu = numpycnn.relu(l3_feature_map) im = PIL.Image.fromarray(numpy.uint8(l3_feature_map_relu[:, :, 0])) im.save("conv3_relu1.png") lbl3.text = "L3Map1ReLU" img3.source = "conv3_relu1.png" img3.reload() l3_feature_map_relu_pool = numpycnn.pooling( l3_feature_map_relu, 2, 2) im = PIL.Image.fromarray( numpy.uint8(l3_feature_map_relu_pool[:, :, 0])) im.save("conv3_relu_pool1.png") lbl4.text = "L3Map1ReLUPool" img4.source = "conv3_relu_pool1.png" img4.reload() img5.source = "" img5.reload() img6.source = "" img6.reload() img7.source = "" img7.reload() img8.source = "" img8.reload() img9.source = "" img9.reload() lbl5.text = "" lbl6.text = "" lbl7.text = "" lbl8.text = "" lbl9.text = "" return l3_feature_map_relu_pool