Advertisement
Guest User

Untitled

a guest
Sep 24th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.63 KB | None | 0 0
  1. from PIL import Image
  2. import matplotlib as mpl
  3. import matplotlib.pyplot as plt
  4. import scipy.io
  5. import numpy as np
  6.  
  7.  
  8. def data(dataset, i, j):
  9.     """ возвращает i-тый вектор j-того символа. """
  10.     return dataset[:,i,j].reshape((16,16)).transpose()
  11.  
  12. def show_img(dataset, i, j):
  13.     """ рисует i-тое изображение j-того символа. """
  14.     img = Image.fromarray(data(dataset, i, j), 'L')
  15.     img.show()
  16.    
  17. def classify(i, p):
  18.     return p
  19.  
  20. img_shape = (16, 16)
  21.  
  22.  
  23. mat = scipy.io.loadmat('usps_all.mat')
  24. raw_data = mat['data']
  25. ##
  26.  
  27. ## todo
  28. Nseg = 5
  29.  
  30. bin_data = []
  31. seg = []
  32. res = np.zeros((5, 10, 120), dtype=np.int8)
  33. # res.shape = (кол-во h, кол-во сегментов, кол-во классов, мощность выборки)
  34.  
  35. test_data = 0
  36. train_data = 0
  37. bin_data = raw_data.copy()
  38. seg = []
  39. for j in range(0,Nseg):
  40.     ## делаем 5 сегментов
  41.     seg.append(bin_data[:, j:600:Nseg, :])
  42. e = []
  43. for j in range(0, Nseg):
  44. # цикл по сегментам
  45.     e.append(seg.copy())
  46.     # вытаскиваем один сегмент и помещаем в test_data
  47.     test_data = np.array(e[j].pop(j))
  48.     # объединяем четыре оставшихся сегмента в train_data
  49.     train_data = np.concatenate(e[j], axis = 1)
  50.     # обучение
  51.     #theta = NBtrain(train_data, classify)
  52.     #for p in range(0,10):
  53.        # for k in range(0,120):
  54.             #res[j, p, k] = NBclassify(test_data[:, k, p], theta)
  55.            # res[i, j, p, k] = NBclassify(test_data[:, k, p], theta)
  56.  
  57. #for i in range(0,len(test_images)):
  58. #    test_images[i] = np.array(test_images[i])/255
  59. #
  60. #for i in range(0,len(tr_images)):
  61. #    tr_images[i] = np.array(tr_images[i])/255
  62.  
  63. def activ(x):
  64.     return np.maximum(x,0)
  65.     #return (np.exp(2*x)-1)/(1+np.exp(2*x))
  66.     #return 1/(1+math.exp(-x))
  67.     #return math.tanh(x)
  68.  
  69. def nn_calculate(img):
  70.     resp = list(range(0,10))
  71.     for i in range(0,10):
  72.         r = w[:,i]*img
  73.         r = activ(np.sum(r))+b[i]
  74.         resp[i] = r
  75.     return np.argmax(resp)
  76.  
  77. w = (2 * np.random.rand(10, 256) - 1) / 10
  78. b = (2 * np.random.rand(10) - 1) / 10
  79.  
  80. (_, Nsamples, Nclasses) = train_data.shape
  81. resp = np.zeros(10, dtype=np.float32)
  82. epoch_max=100
  83. for epoch in range(epoch_max):
  84.     for c in range(Nclasses):
  85.         for n in range (Nsamples):
  86.             img = train_data[: ,n , c]
  87.             for i in range(0, 10):
  88.                 r = w[i] * img
  89.                 r = activ(np.sum(r) + b[i])
  90.                 resp[i] = r
  91.             resp_cls = np.argmax(resp)
  92.             resp = np.zeros(10, dtype=np.float32)
  93.             resp[resp_cls] = 1.0
  94.             true_resp = np.zeros(10, dtype=np.float32)
  95.             true_resp[c] = 1.0
  96.             error = resp - true_resp
  97.             delta = error * ((resp >= 0) * np.ones(10))
  98.             for i in range(0, 10):
  99.                 w[i] -= np.dot(img, delta[i])
  100.                 b[i] -= delta[i]
  101.  
  102.  
  103.  
  104. (_, Ntest_samples, Nclasses) = test_data.shape
  105.  
  106. def nn_calculate(img):
  107.     resp = list(range(0,10))
  108.     for i in range(0,10):
  109.         r = w[i] * img
  110.         r = activ(np.sum(r)+b[i])
  111.         resp[i] = r
  112.     return np.argmax(resp)
  113.  
  114. total = Ntest_samples * Nclasses
  115. valid = 0
  116. invalid = []
  117.  
  118. for c in range(Nclasses):
  119.     for n in range(Ntest_samples):
  120.         img = test_data[:, n, c]
  121.         predicted = nn_calculate(img)
  122.         if predicted == c:
  123.             valid = valid + 1
  124.         #else:
  125.             #invalid.append("image": img, "predicted": predicted, "true": true)
  126.  
  127.     print("accuracy {}".format(valid/total)+" epoch",epoch)
  128. #
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement