# Получить целевую Y, координату точки
target_Y = arr_y[i]
# Ошибка E = целевое значение – выход нейрона
E = target_Y – y
# Меняем коэффициент при x, в соответствии с правилом A+дельтаA = A
A += lr*(E/x)
# Вывод данных готовой прямой
print('Готовая прямая: y = ', A, '* X')
Результатом ее работы будет функция готовой прямой:
y = 2.0562708725692196 * X
Для большей наглядности, что я специально указал данные в обучающей выборке, так чтобы они лежали около значений функции y = 2x. И после обучения нейрона, мы получили ответ очень близкий к этому значению.
Было бы неплохо визуализировать все происходящие на графике прямо в Python.
Визуализация позволяет быстро получить общее представление о том, что мы делаем и чего добились.
Для реализации этих возможностей, нам потребуется расширить возможности Python для работы с графикой. Для этого необходимо импортировать в нашу программу, дополнительный модуль, написанный другими программистами, специально для визуализаций данных и функций.
Ниже приведена инструкция, с помощью которой мы импортируем нужный нам пакет для работы с графикой:
import matplotlib.pyplot as plt
Кроме того, мы должны дополнительно сообщить Python о том, что визуализировать следует в нашем блокноте, а не в отдельном окне. Это делается с помощью директивы:
%matplotlib inline
Если не получается загрузить данный пакет в программу, то скорей всего его надо скачать из сети. Делать это удобно через Anaconda Prompt, который устанавливается вместе с пакетом Anaconda.
Для системы Windows, в Anaconda Prompt вводим команду:
conda install matplotlib
И следуем инструкциям. Для других операционных систем возможно потребуется другая команда.
Теперь мы полностью готовы к тому, чтобы представить наши данные и функции в графическом виде.
Выполним код:
import matplotlib.pyplot as plt
%matplotlib inline
# Функция для отображения входных данных
def func_data(x_data):
return [arr_y[i] for i in range(len(arr_y))]
# Функция для отображения начальной прямой
def func_begin(x_begin):
return [A_vis*i for i in x_begin]
# Функция для отображения готовой прямой
def func(x):
return [A*i for i in x]
# Значения по X входных данных
x_data = arr_x
# Значения по X начальной прямой (диапазон значений)
x_begin = [i for i in range(0, 11)]
# Значения по X готовой прямой (диапазон значений)
x = [i for i in range(0, 11)]
#x = np.arange(0,11,1)
# Значения по Y входных данных
y_data = func_data(x_data)
# Значения по Y начальной прямой
y_begin = func_begin(x_begin)
# Значения по Y готовой прямой
y = func(x)
# Зададим имена графику и числовым координатам
plt.title("Neuron")