ВВЕДЕНИЕ
Алгоритмы обучения могут быть довольно сложными, и сегодня такие среды программирования, как TensorFlow, PyTorch, Caffe и многие другие, могут сэкономить вам много времени. Одним из лучших инструментов для реализации этих алгоритмов является TensorFlow. Это комплексная платформа с открытым исходным кодом для машинного обучения, разработанная исследователями и инженерами Google для проведения машинного обучения и исследований глубоких нейронных сетей. Он имеет комплексную и гибкую экосистему инструментов, библиотек и ресурсов сообщества, которая позволяет исследователям внедрять самые современные технологии машинного обучения, а разработчикам легко создавать и развертывать приложения на основе машинного обучения.
УСТАНОВКА
Чтобы установить текущую версию, которая включает поддержку карт графических процессоров с поддержкой CUDA (Ubuntu и Windows):
$ pip install tensorflow
ПРОСТАЯ ПРОГРАММА С TENSORFLOW
ИМПОРТ
Начнем с импорта необходимых библиотек. В данном случае мы импортируем Tensorflow, Numpy и Keras. Numpy помогает легко и быстро представлять данные в виде списков, а Keras помогает в создании основы для определения нейронной сети как набора последовательных слоев.
import tensorflow as tf import numpy as np from tensorflow import keras
ОПРЕДЕЛЕНИЕ И СОСТАВЛЕНИЕ НЕЙРОННОЙ СЕТИ
Приведенный ниже код написан на Python с использованием Tensorflow и API в TensorFlow под названием Keras.
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
Нейронная сеть — это, по сути, набор функций, определенных Keras, которые могут изучать шаблоны. Простейшая возможная нейронная сеть — это та, в которой есть только один нейрон, и это то, что делает эта строка кода. В Керасе слово «плотный» определяет слой связанных нейронов. В данном случае здесь только одно плотное. Итак, есть только один слой и в нем только одна единица, так что это один нейрон. Последовательные слои определяются последовательно, отсюда и слово «последовательный». Мы также можем определить форму ввода в нейронную сеть, и в этом случае наша форма ввода очень проста. Это всего лишь одно значение.
model.compile(optimizer='sgd', loss='mean_squared_error')
Чтобы оптимизировать нашу модель ML, нам нужно знать и использовать много математики, вычислений, вероятностей и т. д. Но в случае с Tensorflow и Keras это уже реализовано в функциях. Есть также две другие функциональные роли, о которых нам следует знать. Это функции потерь и оптимизаторы. Функция потерь измеряет, насколько хорошим или плохим было предположение, и оптимизатор вычисляет следующее предположение. Логика в том, что каждое предположение должно быть лучше предыдущего. По мере того, как догадки становятся все лучше и лучше, точность приближается к 100 процентам. В этом случае потеря представляет собой среднеквадратичную ошибку, а оптимизатор — SGD, что означает Стохастический градиентный спуск.
ПРЕДСТАВЛЕНИЕ ДАННЫХ ДЛЯ ОБУЧЕНИЯ
Наш следующий шаг — представить известные данные. np.array использует библиотеку Python под названием Numpy, помогающую представлять данные в виде списков. Итак, здесь мы можем создать один список для X и другой для Y, каждый из которых принимает по шесть значений. Мы видим, что существует связь между ними: Y=2X-1, где X=-1, Y=-3 и т. д.
X = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) Y = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
ОБУЧЕНИЕ НЕЙРОННОЙ СЕТИ
Процесс обучения нейронной сети, когда она «изучает» взаимосвязь между X и Y, находится в вызове model.fit. Здесь он будет проходить через цикл, т. Е. Делать предположения, измерять, насколько это хорошо или плохо, использовать оптимизатор, чтобы сделать еще одно предположение и т. Д. Он будет делать это в течение указанного нами количества эпох. Например, в приведенном ниже коде значение эпох, равное 500, означает, что он пройдет цикл обучения 500 раз. Когда мы запустим этот код, мы увидим, что потери в правой части уменьшаются. Это связано с лучшим предположением, сделанным оптимизатором.
model.fit(X, Y, epochs=500)
ПРОГНОЗ
Хорошо, теперь у нас есть модель, обученная для изучения связи между X и Y. Мы можем использовать метод model.predict, чтобы вычислить Y для неизвестное значение X. Так, например, если X = 10, как вы думаете, чему будет Y? Подумайте, прежде чем запускать этот код:
print(model.predict([10.0]))
Вы могли подумать, что 19, верно? Но он вернет значение, очень близкое к 19, но не совсем 19. Как вы думаете, почему это должно быть ? В конечном счете есть две основные причины. Во-первых, мы обучили его, используя очень мало данных. Всего шесть точек. Эти шесть точек являются линейными, но нет никакой гарантии, что для каждого X соотношение будет Y = 2X - 1. Существует очень высокая вероятность того, что Y равно 19 для X равно 10, но нейронная сеть имеет дело с вероятностями. Это вторая основная причина. Таким образом, нейронная сеть вычислит значение ближе к 19, но не точно к 19 для Y.
Спасибо за чтение. Я надеюсь, что это будет полезно.