Advertisement
Guest User

Untitled

a guest
Nov 26th, 2017
127
0
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)))) # Суммарное количество ошибок - выводим
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement