1 ...7 8 9 11 12 13 ...22 Создадим переменную А, являющейся коэффициентом крутизны наклона прямой, и зададим ей любое значение, пусть это будет всё те же А=0.4.
A = 0.4
Запомним начальное значение коэффициента А:
A_vis = A
Покажем функцию начальной прямой:
print('Начальная прямая: ', A, '* X')
Укажем значение скорости обучения:
lr = 0.001
Зададим количество эпох:
epochs = 3000
Эпоха– значение количества проходов по обучающей выборке. Если в нашей выборке девять наборов, то одна эпоха – это один проход в цикле всех девяти наборов данных.
Зададим наш набор данных, используя массивы. Создадим два массива. В один массив поместим все входные данные – x, а в другой целевые значения (ответы) – Y.
Создадим массив входных данных х:
arr_x = [1, 2, 3, 3.5, 4, 6, 7.5, 8.5, 9]
Создадим массив целевых значений (ответы Y):
arr_y = [2.4, 4.5, 5.5, 6.4, 8.5, 11.7, 16.1, 16.5, 18.3]
Задаем в цикле эпох, вложенный цикл – for i in range(len(arr)), который будет последовательно пробегать по входным данным, от начала до конца. А циклом – for e in range(epochs), мы как раз указываем количество таких пробегов (итераций):
for e in range(epochs):
for i in range(len(arr)):
Функция len(arr) возвращает длину массива, в нашем случае возвращает девять.
Получаем x координату точки из массива входных значений x:
x = arr_x[i]
А затем действуем как в случае с линейным классификатором:
# Получить расчетную y, координату точки
y = A * x
# Получить целевую Y, координату точки
target_Y = arr_y[i]
# Ошибка E = целевое значение – выход нейрона
E = target_Y – y
# Меняем коэффициент при x, в соответствии с правилом A+дельтаA = A
A += lr*(E/x)
Напомню, процессом изменения коэффициентов в ходе выполнения цикла программы, называют – процессом обучения.
Выведем результат после обучения:
print('Готовая прямая: y = ', A, '* X')
Полный текст программы:
# Инициализируем любым числом коэффициент крутизны наклона прямой
A = 0.4
A_vis = A # Запоминаем начальное значение крутизны наклона
# Вывод данных начальной прямой
print('Начальная прямая: ', A, '* X')
# Скорость обучения
lr = 0.001
# Зададим количество эпох
epochs = 3000
# Создадим массив входных данных x
arr_x = [1, 2, 3, 3.5, 4, 6, 7.5, 8.5, 9]
# Создадим массив целевых значений (ответы Y)
arr_y = [2.4, 4.5, 5.5, 6.4, 8.5, 11.7, 16.1, 16.5, 18.3]
# Прогон по выборке
for e in range(epochs):
for i in range(len(arr_x)): # len(arr) – функция возвращает длину массива
# Получить x координату точки
x = arr_x[i]
# Получить расчетную y, координату точки
y = A * x
# Получить целевую 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 = 2 x. И после обучения нейрона, мы получили ответ очень близкий к этому значению.
Было бы неплохо визуализировать все происходящие на графике прямо в 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]
Читать дальше