Форум программистов, компьютерный форум, киберфорум
Наши страницы
Konst2016
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Реализация однослойной нейросети без функций

Запись от Konst2016 размещена 06.10.2019 в 11:27
Обновил(-а) Konst2016 07.10.2019 в 18:53 (лучше код,граф.)

Здравствуйте!Имеем такую однослойную нейросеть:
Название: FCNN _one_lay(3).png
Просмотров: 130

Размер: 10.2 Кб
Обучим ее просто числам) :
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import numpy as np
import matplotlib.pyplot as plt
# Зерно для генератора
np.random.seed(150) 
 
# Сигмоида 
def nonlin(x,deriv=False):
    if(deriv):
        return x*(1-x)
    return 1.0/(1.0+np.exp(-x))
 
#Исходные данные
# Это целый train set, 
data_input = np.array([ [[1,1,1]],
                        [[1,0,1]],
                        [[0,0,1]],
                       ]) 
#Это правильные ответы - target-ы
data_output = np.array([[[1, 1, 0, 1]],
                        [[0 ,0 ,1, 0.5]],
                        [[0.8,1,0.9, 1]],
                        [[0.8,0.8,1,0.2]]])
 
def plot_graphic_by_x_and_y(x,y):
      plt.plot(x,y)
      plt.show()    
 
# Сделаем однослойный перпецетрон с 4-мя нейронами
# в данном слое и получающий 3 сигнала на каждый из этих нейронов
# назовем все это синапсами - syn
syn0 = np.random.normal(0,2**0.5,size=(4,3)) # Гаусово распределение
"""
Прямой проход и backprop в целом train set-e
 
"""
learning_rate=0.07
n_epochs=[]
n_mse=[]
for epocha in range(80):
    for i in range(3): # 3 высота train-set-a
        X=data_input[i]
        Y=data_output[i]
        # Взвесили сигналы и активировали нейроны
        #---------------
        E=np.dot(syn0,X.T)
        hidden0=nonlin(E)
        #---------------
        delta_out=abs(Y.T-hidden0)
        grads_outNN=delta_out*nonlin(E,deriv=True)
 
        # Взвесим ошибку на syn0
        #-----------------------
        grads_on_syn0=np.dot(grads_outNN.T,syn0) # Здесь нет функции активации, и соответственно производной,ниже покажу что будет если добавить производную
        #входных сигналов
        #----------------------- 
        # Исправляем веса
    syn0+=learning_rate*grads_on_syn0*X
    error=np.mean(np.square(delta_out),axis=0)
    print("mse:",error)
        
 
    n_epochs.append(epocha)
    n_mse.append(error)
 
plot_graphic_by_x_and_y(n_epochs,n_mse)    
"""
Предсказание сделать это просто получить hidden0 при
данных syn0 без циклов
"""       
X=np.array([[0.3,0.7,1.0]])
 
# Взвесили сигналы и активировали нейроны
#---------------
E=np.dot(syn0,X.T)
hidden0=nonlin(E)
 
print("predict:",hidden0)
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
k:\Python_projects\helpCyb>python app.py
python app.py
python app.py
mse: [0.31974581]
mse: [0.26783847]
mse: [0.24290458]
mse: [0.2267741]
mse: [0.21511286]
mse: [0.20614021]
mse: [0.19894945]
mse: [0.19301772]
mse: [0.18801735]
mse: [0.18373024]
mse: [0.18000445]
mse: [0.1767302]
mse: [0.17382585]
mse: [0.17122915]
mse: [0.1688917]
mse: [0.16677515]
mse: [0.1648487]
mse: [0.16308723]
mse: [0.16147005]
mse: [0.15997995]
mse: [0.15860241]
mse: [0.15732517]
mse: [0.15613772]
mse: [0.15503105]
mse: [0.15399733]
mse: [0.15302976]
mse: [0.15212239]
mse: [0.15126996]
mse: [0.15046785]
mse: [0.14971195]
mse: [0.1489986]
mse: [0.1483245]
mse: [0.14768673]
mse: [0.14708263]
mse: [0.14650981]
mse: [0.14596609]
mse: [0.14544952]
mse: [0.1449583]
mse: [0.14449078]
mse: [0.14404548]
mse: [0.14362101]
mse: [0.14321611]
mse: [0.14282963]
mse: [0.14246048]
mse: [0.14210768]
mse: [0.1417703]
mse: [0.1414475]
mse: [0.14113849]
mse: [0.14084252]
mse: [0.14055892]
mse: [0.14028705]
mse: [0.14002631]
mse: [0.13977613]
mse: [0.13953601]
mse: [0.13930544]
mse: [0.13908398]
mse: [0.13887118]
mse: [0.13866664]
mse: [0.13846998]
mse: [0.13828083]
mse: [0.13809887]
mse: [0.13792376]
mse: [0.13775521]
mse: [0.13759292]
mse: [0.13743663]
mse: [0.13728608]
mse: [0.13714103]
mse: [0.13700124]
mse: [0.1368665]
mse: [0.13673659]
mse: [0.13661133]
mse: [0.13649051]
mse: [0.13637398]
mse: [0.13626154]
mse: [0.13615304]
mse: [0.13604833]
mse: [0.13594726]
mse: [0.13584969]
mse: [0.13575547]
mse: [0.1356645]
predict: [[0.23660945]
 [0.6844814 ]
 [0.71813628]
 [0.04498178]]
// С прошлой версии поста
При правильном bacprop:
Нажмите на изображение для увеличения
Название: right_gr.png
Просмотров: 1601
Размер:	19.5 Кб
ID:	5604
Если сделать так,т.е. входные сигналы при backprop пропустить через производную функции активации,которой у них нет,оп!
Нажмите на изображение для увеличения
Название: rovn_umnoj_proizv.png
Просмотров: 1619
Размер:	12.1 Кб
ID:	5605
Размещено в Без категории
Просмотров 265 Комментарии 13
Всего комментариев 13
Комментарии
  1. Старый комментарий
    “Имеем такую однослойную нейросеть:”
    Нет, это следы лапки курочки на мокром песке. Что это за жесть рисунок на почему то оранжевом фоне? Смотрели как рисуют нейросети? Хотя б в Paint…

    “Обучим ее просто числам) :”
    Может правильней написать классифицировать бинарную матрицу 3 на 3?

    “#Это правильные ответы - target-ы”
    Матрица 4 на 4 это ответ обучающей 3 на 3? 0_0.
    Где график loss по X номер эпохи, по Y ошибка?
    Запись от Excalibur921 размещена 06.10.2019 в 19:27 Excalibur921 вне форума
  2. Старый комментарий
    Тут мелочи не к чему,код изучайте,тогда у вас что то реальное будет,а не фантазии.Я публикую свою реальную работу и популиризирую тему,в вашей терминологии легко запутаться,я для популярности пишу,да Матрица 4 на 4 это ответ обучающей 3 на 3.Это необычно и заставляет уйти от шаблонов.На оранжевом фоне это я в yEd live делал,потом Gimp ом дорисовал.
    Запись от Konst2016 размещена 06.10.2019 в 19:36 Konst2016 вне форума
  3. Старый комментарий
    Да в target ах должна быть матрица (3,4).
    Запись от Konst2016 размещена 06.10.2019 в 19:39 Konst2016 вне форума
  4. Старый комментарий
    Вообще то нейроны неприятно выглядят)
    Запись от Konst2016 размещена 06.10.2019 в 19:42 Konst2016 вне форума
  5. Старый комментарий
    и опять никчёмный топик от аффтара
    аффтар определённо - жжёт.
    Цитата:
    код изучайте
    я, конечно, извиняюсь... но.. это - не код. это - туфта.
    Цитата:
    и популиризирую тему
    боюсь, что многие, после такого описалова - просто спутают это всё - с туалетной бумагой.

    to author,
    вот... потратил на вас своё время и нашёл материал по теме. Это то - к чему вы должны стремиться:
    https://www.youtube.com/watch?v=GX7q...cZd-x0qd8G0VN_
    Запись от untyped размещена 06.10.2019 в 20:40 untyped вне форума
  6. Старый комментарий
    У меня код определенно крут!!!Стремится я согласен.
    Запись от Konst2016 размещена 07.10.2019 в 11:38 Konst2016 вне форума
  7. Старый комментарий
    Я ведь тут пишу о самодельной нейронной сети,а даже в ютуб говорят как работать с пакетами,я вот когда 5 месяцев назад про такую же сеть писал, то код был неправильный,но я опубликовал его здесь и думал над ним и вот крутой код самодельной НС(пока графика нет).
    Запись от Konst2016 размещена 07.10.2019 в 11:51 Konst2016 вне форума
  8. Старый комментарий
    “у вас что то реальное будет,а не фантазии.Я публикую свою реальную работу и популиризирую тему,”
    Массив чисел в консоли это туфта. Покажите графики loss по эпохам.
    И задача очень странная…берите обычную параболу в 2д и пробуйте аппроксимировать. Вот тут целая эпопея…3 варианта алгоритма… или даже 5…
    http://www.cyberforum.ru/ai/thread2449714-page10.html#post13874192
    Запись от Excalibur921 размещена 07.10.2019 в 13:57 Excalibur921 вне форума
  9. Старый комментарий
    Ok,посмотрим
    Запись от Konst2016 размещена 07.10.2019 в 14:24 Konst2016 вне форума
  10. Старый комментарий
    Цитата:
    Сообщение от Excalibur921 Просмотреть комментарий
    “у вас что то реальное будет,а не фантазии.Я публикую свою реальную работу и популиризирую тему,”
    Массив чисел в консоли это туфта. Покажите графики loss по эпохам.
    И задача очень странная…берите обычную параболу в 2д и пробуйте аппроксимировать. Вот тут целая эпопея…3 варианта алгоритма… или даже 5…
    http://www.cyberforum.ru/ai/thread2449714-page10.html#post13874192
    Можете рассказать про параболу?Что то читал не совсем понял.Вот я получаю Y параболы по диапазону X,train_set:=Y и target:=X.Потом в predict я даю НС какое то число,получаю ее координату x,и строю параболу с этой точкой и она должна быть похожей на параболу,так я понимаю?
    Запись от Konst2016 размещена 07.10.2019 в 20:15 Konst2016 вне форума
  11. Старый комментарий
    Пришли к выводу что лудше взять не рандом X точку на параболе внутри Xmin Xmax, а брать 11 точек с постоянным шагом внутри Xmin Xmax, и просто записать их в массив.
    При обучении перемешивать массив и подавать НС на каждой итерации.

    Проверка это построение изначальной параболы по 11 точкам f(X) и ответа НС f(X). Просто графики там гладкие т.к. мат пакеты делают сглаживание, да и ивзуально видно где обучилась а где нет.
    Запись от Excalibur921 размещена 08.10.2019 в 23:39 Excalibur921 вне форума
  12. Старый комментарий
    “Я публикую свою реальную работу и популиризирую тему”
    Наверно вместо привязки к любому языку и стилю кода намного полезней пояснить этот бекпроп чтобы любой мог сделать на своем языке или мат пакете с нуля. Пояснений навалом в инете, но все они не проверенные. Очень много воды и опечаток. Даже на форуме 3 кода и не один я так понял не проверен или не работает правильно. Навалом видео в ютубе где час мусолят рисуя маркером кривые плохо читаемые буквы. Если у вас получилось сделать сеть с нуля и она обучилась аппроксмировать функцию, то и распишите ее алгоритм обучения. С фотками графиков ошибки по эпохам.
    Например показать графиками как Скорость обучения влияет на сходимость и ошибку.


    “Gimp ом дорисовал.”
    Может гуглить такое?
    “Gimp рисуем прямую”,
    “Gimp рисуем окружность”,
    “Gimp добовляем текст”
    “Gimp работа со слоями”

    “Gimp альфаканал и прозрачность”
    Запись от Excalibur921 размещена 08.10.2019 в 23:55 Excalibur921 вне форума
  13. Старый комментарий
    Я попробую сделать в комментариях в следующих статьях(если будут),вообщем надо представлять какой вектор должен заходить,его форму,например при feed_forward как я называю вектор должен быть 'стоячим',при backprop мы дельту 1 раз 'ложим' для весов последнего слоя и дальше получаем такие же лежачие вектора ,при матричном продукте мы используем его слева(при backprop е).Я вот сегодня осмысливал что такое дельта правило,т.е когда мы веса умножаем(или делаем матричный продукт),это мы получаем вертикальную компаненту некого радиус вектора,который можно выразить как R(W)=X*W,который в трех-мерном пространстве рисует сигнал подобный target-ам,при этом его пропускают через функцию активации,что заставляет нас иметь дело с производной сложной функции,а производная это угол касательной,соответственно прилежащий катет умножаем на тангенс угла(производную такого вектора),получаем вертикальную компаненту(градиент).
    Насчет рисунков,в вк читал тоже вопрос как НС нарисовать,и сказал один что не будет с помощью линий и кружков рисовать,типа там их слишком много)
    Запись от Konst2016 размещена 10.10.2019 в 21:31 Konst2016 вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.