daily pastebin goal
61%
SHARE
TWEET

Untitled

a guest Nov 26th, 2017 96 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from matplotlib import pylab  ## Для рисования графиков
  2. import numpy  # математическая библиотека питон
  3. from numpy import array, dot, random, concatenate, sum, abs # необходимые математические функции
  4. unit_step = lambda x: 0 if x < 0 else 1  # пороговая функция активации
  5.  
  6. expected_class = lambda x: 0 if x < 0.5 else 1 # функция поиска ожидаемого значения
  7.  
  8. %matplotlib inline
  9.  
  10. pylab.figure(figsize=(20,10))
  11. n=100 # половина объёма обучающей выборки
  12. eta = 0.5 # параметр скорости обучения
  13. epochs = 5 # количество эпох обучения
  14. checkn = 10000 # половина объема тестовой выборки
  15. x1 = random.random(n)-0.5  #Генерируем иксы для точек возле нуля
  16. y1 = random.random(n)-0.5  # Генерируем игреки для точек возле нуля
  17. x2 = random.random(n)+0.5  # Генерация иксов для точек возле 1
  18. y2 = random.random(n)+0.5  # Генерация игреков для точек возле 1
  19. x = concatenate([x1,x2])   # Объединяем иксы
  20. y = concatenate([y1,y2])  # Объединяем игреки в один массив
  21. pylab.subplot(121)
  22. pylab.plot(x, y,'go', color = 'Blue', animated = True)  # рисуем наши точки обучающей выборки
  23.  
  24.  
  25. training_data = [] # массив для тренировочной выборки объёмом 2n
  26. for i in range(0,2*n):
  27.     trainSet = (array([x[i],y[i],1]), expected_class(x[i]))  # вид набора ([вход1, вход2, фиктивная единица], ожидаемое)
  28.     training_data.append(trainSet) # упаковываем все в массив
  29.  
  30. w = random.rand(3) # рандомно определяем коэффициенты для обучения
  31.  
  32. nums = []  # для построения графика - номера итераций
  33. errorSums = [] # для построения графика - суммарное количество ошибок
  34. print("До обучения:")   # Выводим коэффициенты до обучения
  35. print (w)
  36. for i in range(0,epochs): # в цикле по количеству эпох
  37.     errors = []  # массив ошибок пуст
  38.     for j in range(0, 2*n): # для каждого набора из тренировочных:
  39.             x, expected = training_data[j] # выдергиваем входные данные в икс, ожидаемый результат в expected
  40.             result = dot(w, x) # считаем результат деятельности нейрона, дот это суммапроизведений
  41.             error = expected - unit_step(result) # находим разницу с ожидаемым и значением пороговой функции
  42.             errors.append(error) # добавляем ошибку в список
  43.             w += eta * error * x # и обучаем нейрон по дельта-правилу
  44.     nums.append(i) # Добавляем номер итерации для графика
  45.     errorSums.append(sum(abs(errors))) # добавляем сумму модулей ошибок в список для графика
  46.    
  47.    
  48. pylab.subplot(122)  
  49. pylab.plot(nums, errorSums, animated = True)  # рисуем график ошибки от итерации (эпохи)
  50. pylab.show
  51. print("После обучения:")
  52. print (w)
  53.  
  54. x1 = numpy.random.random(checkn)-0.5  #Генерируем иксы для точек возле нуля проверочной выборки
  55. y1 = numpy.random.random(checkn)-0.5  # Генерируем игреки для точек возле нуля проверочной выборки
  56. x2 = numpy.random.random(checkn)+0.5  # Генерация иксов для точек возле 1 проверочной выборки
  57. y2 = numpy.random.random(checkn)+0.5  # Генерация игреков для точек возле 1 проверочной выборки
  58. x = numpy.concatenate([x1,x2])   # Объединяем иксы
  59. y = numpy.concatenate([y1,y2])  # Объединяем игреки в один массив
  60.  
  61. check_data = []  # сюда складываем проверочные наборы
  62. for i in range(0,2*checkn):
  63.     checkSet = (array([x[i],y[i],1]), expected_class(x[i])) # они такого же формата, как и обучающие
  64.     check_data.append(checkSet)
  65.    
  66. checkError = []  # ошибки при работе с проверочной выборкой  
  67. for x, expected in check_data:
  68.     result = dot(x, w) # считаем сумму произведений
  69.     checkError.append((expected - unit_step(result))*(expected - unit_step(result))) # и находим квадратичную разницу между ожидаемым значением и значением пороговой
  70. print("Сумма ошибок равна: {}".format(sum(abs(checkError)))) # Суммарное количество ошибок - выводим
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top