Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.91 KB | None | 0 0
  1. from skimage.io import imread,imsave, imshow
  2. from skimage import img_as_float
  3. import skimage
  4. import numpy
  5. from PIL import Image
  6. import os
  7.  
  8. class DataImage():
  9.     def __init__(self,input_image_path):
  10.         self.im_float = ""
  11.         self.input_image_path = input_image_path
  12.  
  13.     def resize_image(self):
  14.         input_image_path = self.input_image_path
  15.         size = (35, 35)
  16.         output_image_path = "asx.png"
  17.         original_image = Image.open(input_image_path)
  18.         width, height = original_image.size
  19.  
  20.  
  21.         resized_image = original_image.resize(size)
  22.         width, height = resized_image.size
  23.  
  24.         resized_image.save(output_image_path)
  25.         self.output = output_image_path
  26.  
  27.     def image(self):
  28.         numpy.set_printoptions(threshold=numpy.nan)
  29.         im = imread(self.output)
  30.         im_float = img_as_float(im)
  31.         im_float = numpy.asarray(skimage.color.rgb2grey(im_float))
  32.         imsave("123.png",im_float)
  33.  
  34.         return im_float.reshape(-1)
  35.  
  36.  
  37.  
  38.  
  39.  
  40. class NeuralNet:
  41.     def __init__(self, inp, hid, out, epsilon):
  42.  
  43.         self.inp = inp
  44.         self.hid = hid
  45.         self.out = out
  46.  
  47.         import random
  48.         self.wa = []
  49.         self.wb = []
  50.  
  51.         for i in range(self.inp):
  52.             weights_row = []
  53.             for j in range(self.hid):
  54.                 weights_row.append(random.uniform(-epsilon, epsilon))
  55.             self.wa.append(weights_row)
  56.  
  57.         for i in range(self.hid):
  58.             weights_row = []
  59.             for j in range(self.out):
  60.                 weights_row.append(random.uniform(-epsilon, epsilon))
  61.             self.wb.append(weights_row)
  62.  
  63.     def sigmoid(self, x):
  64.         return 1 / (1 + math.exp(-x))
  65.  
  66.     def y(self, x):
  67.  
  68.         hidden_values = []
  69.         for j in range(self.hid):
  70.             yj = 0
  71.             for i in range(self.inp):
  72.                 yj += x[i] * self.wa[i][j]
  73.  
  74.             yj = self.sigmoid(yj)
  75.             hidden_values.append(yj)
  76.  
  77.         output_values = []
  78.         for k in range(self.out):
  79.             zk = 0
  80.             for j in range(self.hid):
  81.                 zk += hidden_values[j] * self.wb[j][k]
  82.  
  83.             zk = self.sigmoid(zk)
  84.             output_values.append(zk)
  85.  
  86.         return output_values
  87.  
  88.     def train(self, x_data, y_data, eta):
  89.         for t in range(len(x_data)):
  90.  
  91.             hidden_values = []
  92.             for j in range(self.hid):
  93.                 yj = 0
  94.                 for i in range(self.inp):
  95.                     yj += x_data[t][i] * self.wa[i][j]
  96.  
  97.                 yj = self.sigmoid(yj)
  98.                 hidden_values.append(yj)
  99.  
  100.             output_values = []
  101.             for k in range(self.out):
  102.                 zk = 0
  103.                 for j in range(self.hid):
  104.                     zk += hidden_values[j] * self.wb[j][k]
  105.  
  106.                 zk = self.sigmoid(zk)
  107.                 output_values.append(zk)
  108.  
  109.             delta_k = []
  110.             for k in range(self.out):
  111.                 delta_k.append((output_values[k] - y_data[t][k]) * output_values[k] * (1 - output_values[k]))
  112.  
  113.             delta_j = []
  114.             for j in range(self.hid):
  115.                 s = 0
  116.                 for k in range(self.out):
  117.                     s += delta_k[k] * self.wb[j][k]
  118.                 delta_j.append(s * hidden_values[j] * (1 - hidden_values[j]))
  119.  
  120.             for j in range(self.hid):
  121.                 for k in range(self.out):
  122.                     self.wb[j][k] -= eta * delta_k[k] * hidden_values[j]
  123.  
  124.             for i in range(self.inp):
  125.                 for j in range(self.hid):
  126.                     self.wa[i][j] -= eta * delta_j[j] * x_data[t][i]
  127.  
  128.  
  129. import random
  130. import pickle
  131. import numpy as np
  132. import matplotlib.pyplot as plt
  133. import time
  134. import math
  135. import os
  136.  
  137. nn = NeuralNet(1225,400,160,0.1)
  138.  
  139. main_directory = "C:\\shared\\MAILHACK\\train"
  140. not_main_directory = os.listdir(main_directory)
  141. count = 0
  142. number =1000000
  143.  
  144. for l in range(len(not_main_directory)):
  145.     i = random.randint(0,len(not_main_directory)-1 )
  146.     files = os.listdir("C:\\shared\\MAILHACK\\train\\" + not_main_directory[i])
  147.     for k in range(len(files)-1):
  148.         j = random.randint(0,len(files)-1)
  149.         count +=1
  150.         if files[j][files[j].find("."):] == ".jpg" or files[j][files[j].find("."):] == ".png":
  151.             im = DataImage("C:\\shared\\MAILHACK\\train\\" + not_main_directory[i] + '\\' + files[j])
  152.             im.resize_image()
  153.             pix = im.image()
  154.             number = int(not_main_directory[i][:not_main_directory[i].find(" ")]) + 1
  155.             mass = [0] * 160
  156.             mass[number] = 1
  157.             prediction = np.array(nn.y(pix))
  158.             real = mass
  159.             loss = 0.5 * np.sum((prediction - real) ** 2)
  160.             print(prediction)
  161.             print(real)
  162.             print(loss)
  163.             print(count)
  164.             print(files[j])
  165.             x_train = [pix]
  166.             y_train = [real]
  167.             nn.train(x_train, y_train, 0.1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement