Нейронный сети. Эволюция
Шрифт:
– вывод на консоль квадрата переменной x;
– в теле оператора, увеличиваем x на единицу, (запись: x+= 1, эквивалентна записи: x = x + 1)
После чего, программа возвращается к условию цикла. Если условие снова истинно, то мы снова выполняем эти два действия. И так до тех пор, пока x не станет больше 4. Тогда условие вернет ложь и цикл больше не будет выполняться.
Цикл for будем использовать, в основном, для того, чтобы перебирать элементы массива, согласно его индексам. Запишем тот же пример, что и с while, с квадратами первых шести натуральных чисел, используя цикл for:
Конструкция for i in —создает
Применяя функцию range , эту операцию можно сделать немногим иначе:
В данном примере, функция range – задает последовательность счета натуральных чисел, до конечного значения, указанного в скобках.
Классы и их объекты
В реальной жизни мы чаще оперируем не переменными, а объектами. Стол, стул, человек, кошка, собака, корабль – это все объекты. Наилучший способ знакомства с объектами – это рассмотреть конкретный пример:
# класс объектов Сat (кошка)
class Сat:
# Кошки говорят – “Мяу!”
def says (self):
print (‘Мяу!’)
pass
pass
Запись class Сat – означает что создан класс Сat (кошка), а функция def says, внутри класса – это метод класса Сat, который выполняет определенные действия связанные с этим классом. В нашем случае созданный нами метод says выводит на экран – ‘Мяу!’.
Давайте на примере покажем, как создаются объекты класса и работают его методы.
classcat = Сat #создание объекта classСat, класса Сat
classcat.says #использование метода says , объекта classСat
Методов в классе может содержаться так много, насколько это необходимо, для его описания. Кошка помимо того, что может говорить: “Мяу!”, обладает и рядом других важных параметров. К ним относятся цвет шерсти, цвет глаз, кличка, и так далее. И все это, можно описать при помощи методов в классе. Давайте опишем выше сказанное в Python:
Множеству объектов, можно присваивать одинаковый класс и эти объекты в свою очередь, будут обладать одинаковыми методами:
Чтобы получить более полное представление о возможностях объектов, давайте добавим в наш класс переменные, которые будут хранить специфические данные этих объектов, а также методы, позволяющие просматривать и изменять эти данные:
Давайте разбираться что же мы тут написали.
В любом классе можно определить функцию __init__. Эта функция всегда вызывается, когда мы создаем реальный объект класса, с изначально заданными атрибутами. Атрибут – это переменная, которая относится к классу, в котором она определена. В нашем случае, при создании объекта, мы сразу можем указать его атрибуты – кличку и количество лет, которые сразу присваиваются этому объекту. Через созданный нами метод status, мы можем вывести информацию о количестве лет и кличке нашего объекта. Метод number_of_years (self, years), принимает число и изменяет атрибут класса – количество лет. Метод says, не изменился, он все также говорит голосом нашего объекта – ‘Мяу!’.
ГЛАВА 3
Рождение искусственного нейрона
Моделирование нейрона как линейного классификатора
Настало время практически реализовать линейную классификацию. Для этого в Python смоделируем работу искусственного нейрона. Попробуем решить нашу задачу, найдя промежуточные значения, при заданном наборе входных и соответствующим им выходным (целевым) параметрам. Как мы помним – это были высота и длина двух разных видов животных. Это может быть и любой другой условный набор данных, которые можно представить, как параметры размеров одежды, предметов, насекомых, веса, стоимости, градусов и любых других. Отобразим наше задание – список с параметрами двух видов животных:
В дальнейшем все данные, которые надо анализировать при помощи искусственных нейронов и их сетей, будем называть – обучающей выборкой. А процесс изменения коэффициентов, в нашем случае – коэффициент А, в зависимости от функции ошибки на выходе, будем называть – процессом обучения.
Примем за значение х – длины животных, а Y – высота. Так как Y (игрек большое) – это и есть ответ: Y = Ax, то условимся что он и будет целевым значением для нашего нейрона (правильным ответом), а входными данными будут все значения переменной х.
Отобразим для лучшего представления входных данных, график обучающей выборки:
Видно, что наши данные напоминают прямую линию, уравнение которой Y = = 2*x. Данные находятся около значений этой функции, но не повторяют их. Задача нашего нейрон суметь с большой точностью провести эту прямую, несмотря на то, что данные по остальным точкам отсутствуют (например, нет данных о Y координате с точкой с x = 5).