Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from matplotlib import pylab ## Для рисования графиков
- import numpy # математическая библиотека питон
- from numpy import array, dot, random, concatenate, sum, abs # необходимые математические функции
- unit_step = lambda x: 0 if x < 0 else 1 # пороговая функция активации
- expected_class = lambda x: 0 if x < 0.5 else 1 # функция поиска ожидаемого значения
- %matplotlib inline
- pylab.figure(figsize=(20,10))
- n=100 # половина объёма обучающей выборки
- eta = 0.5 # параметр скорости обучения
- epochs = 5 # количество эпох обучения
- checkn = 10000 # половина объема тестовой выборки
- x1 = random.random(n)-0.5 #Генерируем иксы для точек возле нуля
- y1 = random.random(n)-0.5 # Генерируем игреки для точек возле нуля
- x2 = random.random(n)+0.5 # Генерация иксов для точек возле 1
- y2 = random.random(n)+0.5 # Генерация игреков для точек возле 1
- x = concatenate([x1,x2]) # Объединяем иксы
- y = concatenate([y1,y2]) # Объединяем игреки в один массив
- pylab.subplot(121)
- pylab.plot(x, y,'go', color = 'Blue', animated = True) # рисуем наши точки обучающей выборки
- training_data = [] # массив для тренировочной выборки объёмом 2n
- for i in range(0,2*n):
- trainSet = (array([x[i],y[i],1]), expected_class(x[i])) # вид набора ([вход1, вход2, фиктивная единица], ожидаемое)
- training_data.append(trainSet) # упаковываем все в массив
- w = random.rand(3) # рандомно определяем коэффициенты для обучения
- nums = [] # для построения графика - номера итераций
- errorSums = [] # для построения графика - суммарное количество ошибок
- print("До обучения:") # Выводим коэффициенты до обучения
- print (w)
- for i in range(0,epochs): # в цикле по количеству эпох
- errors = [] # массив ошибок пуст
- for j in range(0, 2*n): # для каждого набора из тренировочных:
- x, expected = training_data[j] # выдергиваем входные данные в икс, ожидаемый результат в expected
- result = dot(w, x) # считаем результат деятельности нейрона, дот это суммапроизведений
- error = expected - unit_step(result) # находим разницу с ожидаемым и значением пороговой функции
- errors.append(error) # добавляем ошибку в список
- w += eta * error * x # и обучаем нейрон по дельта-правилу
- nums.append(i) # Добавляем номер итерации для графика
- errorSums.append(sum(abs(errors))) # добавляем сумму модулей ошибок в список для графика
- pylab.subplot(122)
- pylab.plot(nums, errorSums, animated = True) # рисуем график ошибки от итерации (эпохи)
- pylab.show
- print("После обучения:")
- print (w)
- x1 = numpy.random.random(checkn)-0.5 #Генерируем иксы для точек возле нуля проверочной выборки
- y1 = numpy.random.random(checkn)-0.5 # Генерируем игреки для точек возле нуля проверочной выборки
- x2 = numpy.random.random(checkn)+0.5 # Генерация иксов для точек возле 1 проверочной выборки
- y2 = numpy.random.random(checkn)+0.5 # Генерация игреков для точек возле 1 проверочной выборки
- x = numpy.concatenate([x1,x2]) # Объединяем иксы
- y = numpy.concatenate([y1,y2]) # Объединяем игреки в один массив
- check_data = [] # сюда складываем проверочные наборы
- for i in range(0,2*checkn):
- checkSet = (array([x[i],y[i],1]), expected_class(x[i])) # они такого же формата, как и обучающие
- check_data.append(checkSet)
- checkError = [] # ошибки при работе с проверочной выборкой
- for x, expected in check_data:
- result = dot(x, w) # считаем сумму произведений
- checkError.append((expected - unit_step(result))*(expected - unit_step(result))) # и находим квадратичную разницу между ожидаемым значением и значением пороговой
- print("Сумма ошибок равна: {}".format(sum(abs(checkError)))) # Суммарное количество ошибок - выводим
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement