Как написать нейросеть на tensorflow

0
15

Первое знакомство с нейронными сетями на примере Tensorflow 2

Предобаботка данных

Далее будут описаны основные шаги создания нейронный сетей при работе с Tensorflow. Прежде чем начать, необходимо выбрать среду разработки. Я рекомендую использовать для несложных сетей https://colab.research.google.com. Это бесплатная среда разработки написаная командой Google специально для решений в области машинного обучения и нейронных сетей.

Функция fit как раз занимается обучением. Она берёт набор входных данных — xs — и сопоставляет с набором правильных результатов — ys. И так нейросеть обучается в течение 500 итераций — epochs=500. Мы использовали 500 итераций, чтобы наверняка прийти к правильному результату. Суть простая: чем больше итераций обучения, тем точнее будут результаты (однако улучшение точности с каждым повтором будет всё меньше и меньше).

По сути для обработки данных можно использовать то, что удобнее. Можно писать свои функции на Python или использовать библиотеку sklearn.preprocessing. В самом tensorflow тоже есть средства для предобработки в модуле tf.keras.preprocessing. В частности большой выбор инструментов для изображений и текста.

После того как структура модели готова, её нужно скомпилировать. Для этого у модели есть метод compile(). Главное, что можно определить при компиляции — это функция потерь. По сути, от неё зависит результат обучения. Например, среднеквадратичная ошибка сильнее «наказывает» модель за выбросы чем средняя абсолютная ошибка. Что именно использовать, зависит от задачи. Если вам нужно предсказать цену жилья, то, скорее всего, выбросы плохо повлияют на результат. В этом случае больше подойдёт средняя абсолютная ошибка. Если вы предсказываете движение цен на фондовом рынке, то слишком большое отклонение от цены будет во вред, и здесь лучше среднеквадратичная ошибка.

В данном виде модель можно обучить, но гораздо эффективнее это можно сделать, если использовать функционал обратных выходов. С их помощью можно осуществить раннюю остановку обучения для борьбы с переобучением, визуализировать данные и многое другое. Вот пример некоторых из них:

Она очень близка к настоящей, хотя и не равна ей. Поэтому математики и специалисты по машинному обучению решили, что будут считать две формулы равными, если значения их вычислений меньше, чем заранее заданная величина погрешности — например, 0.0000001. И если мы подставим в формулу выше и в настоящую вместо X число 5, то получим следующее:

Установка TensorFlow через Google Colab

Мы использовали стандартные функции для большинства моделей — sgd и mean_squared_error. sgd — это метод оптимизации, который работает на формулах математического анализа. Он помогает скорректировать формулу, чтобы прийти к правильной. mean_squared_error — это функция, которая вычисляет, насколько сильно отличаются полученные результаты по формуле, предложенной нейросетью, от настоящих результатов. Эта функция тоже участвует в корректировке формулы.

В выводе показывается результат выполнения каждой эпохи. Выводится номер эпохи, количество пакетов, затраченное на эпоху время и ошибки. Loss — это расчитанная функция потерь, mean_absolute_error — это метрика указанная при компиляции. Если указать дополнительные метрики, то они тоже будут присутствовать в выводе. Все ошибки с префиксом «val_» — это то же самое только для валидационного набора данных.

ЧИТАТЬ ТАКЖЕ:  Как сгенерировать картинку через нейросеть

В целом машинное обучение похоже на обучение обычного человека. Например, чтобы различать обувь и одежду, нам нужно посмотреть на какое-то количество экземпляров обуви и одежды, высказать свои предположения относительно того, что именно сейчас находится перед нами, получить обратную связь от кого-то, кто уже умеет их различать, — и тогда у нас появится алгоритм, как отличать одно от другого. Увидев туфли после успешного обучения, мы сразу сможем сказать, что это обувь, потому что по всем признакам они соответствуют этой категории.

Если вы вдруг подумали, что можно просто увеличить число итераций и точность станет выше, то это справедливо лишь отчасти. У каждого метода оптимизации есть своя точность, до которой нейросеть может дойти. Например, она может вычислять результат с точностью до 0.00000001, однако абсолютно верным и точным результат не будет никогда. А значит, и абсолютно точного значения формулы мы никогда не получим — просто из-за погрешности вычислений и особенности функционирования компьютеров. Но если условно установить число итераций в миллиард, можно получить примерно такую формулу:

Первая зависимость — это наша библиотека TensorFlow, название которой мы сокращаем до tf, чтобы было удобнее её вызывать в программе. NumPy — это библиотека для эффективной работы с массивами чисел. Можно было, конечно, использовать и обычные списки, но NumPy будет работать намного быстрее, поэтому мы берём его. И последнее — Keras, встроенная в Tensorflow библиотека, которая умеет обучать нейросети.

А ещё многое зависит от выбранного метода оптимизации — то есть того, как нейросеть корректирует формулу, чтобы прийти к нужным результатам. В библиотеке TensorFlow можно найти разные способы оптимизации, и на выходе каждой из них результаты могут различаться. Однако эта тема выходит за рамки нашей статьи — здесь уже необходимо достаточно глубоко погружаться в процесс машинного обучения и разбираться, как именно устроена оптимизация.

Получилось странно — мы ожидали, что будет число 51 (потому что подставили 10 в выражение 5X + 1) — но на выходе нейросеть выдала число 50.98739. А всё потому, что модель нашла очень близкую, но не до конца точную формулу — например, 4.891X + 0.993. Это одна из особенностей машинного обучения.

Sequential удобен если у вас небольшая сеть с последовательной структурой, где слои следуют друг за другом, есть только один вход и один выход. Но что делать если модель должна быть немного хитрее? Для этого в tensorflow есть функциональный API. Перепишем модель выше.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь