Нейронные сети. Эволюция - страница 9




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 = 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")

plt.xlabel("X")

plt.ylabel("Y")


# Зададим имена входным данным и прямым