Часть первая: сеть из одного нейрона и её обвязка
Нейронная сеть из одного нейрона может научиться делать линейную регрессию — находить такую зависимость $y = ax + b$, которая лучше всего описывает данные. Так как формула для перевода градусов Цельсия в Фаренгейты имеет в точности такой вид, то одиночный нейрон должен отлично учиться это делать.
Чтобы обучать и использовать нейронные сети, нужно сначала подготовить вспомогательные функции. Общий план работ:
- celsius_to_fahrenheit — эта фукнция потребуется для создания данных для обучения. Она даёт точный ответ;
- gen_dataset — эта функция создаст нам данные для обучения: набор вопросов и правильных ответов на них;
- mean_squared_error — эта функция посчитает, насколько набор ответов нейронной сети далёк от правильного;
- Класс Network — это и есть нейронная сеть. Он хранит в себе коэффициенты нейронной сети и имеет методы для взаимодействия с сетью:
- Network.__init__ — создаёт либо случайную нейронную сеть, либо сеть с заданными параметрами;
- Network.__repr__ — выдаёт описание сети строчкой, чтобы было удобно пересоздать её в коде;
- Network.predict — выдаёт предсказание сети по переданным данным;
- Network.score — берёт набор данных (вопросы и ответы), для каждого вопроса предсказывает ответ и сравнивает с правильным. Возвращает суммарную «оценку» качества предсказания;
- Network.mutate — создаёт новую нейронную сеть, немного мутируя старую;
(если пишете на другом языке, то меняйте всё в соответствии с языком)
A: Цельсии в Фаренгейты
Начнём так, чтобы не перетрудиться сразу. Напишите функцию celsius_to_fahrenheit , которая берёт температуру в градусах Цельсия и возвращает в градусах Фаренгейта. Формулу посмотрите в Википедии, если тестов ниже вам не хватит 🙂
B: Создание дата-сета
Напишите функцию gen_dataset , с единственным параметром: size — размер обучающей выборки. Функция должна возвращать два массива, которые традиционно называются x_train и y_train .
x_train — набор случайных чисел на отрезке от −100 до +400 ( random.uniform поможет) длины size .
y_train — набор «ответов» (результатов перевод из Цельсия в Фаренгейты) для каждого вопроса.-6.478113785946121 -68.95986937659728 159.64353217340033 388.95577315676417 347.81609825396555 20.339395185296983 -92.1277648778751 319.3583579121206 732.1203916821755 658.0689768571381
Обратите внимание, данные у вас будут другими.
C: Средний квадрат ошибки
Напишите функцию mean_squared_error , которая берёт список правильных ответов y_true и список предсказаний y_pred и по ним вычисляет средний квадрат ошибки. Если мы обозначим правильные ответы через $t_1, t_2, \ldots, t_n$, а предсказания — через $p_1, p_2, \ldots, p_n$, то функция должна вернуть $$ MSE = \displaystyle\frac<\sum\limits_^n (t_i — p_i)^2>=\displaystyle\frac<(t_1-p_1)^2+(t_2-p_2)^2+\ldots+(t_n-p_n)^2>. $$