ВВЕДЕНИЕ

Алгоритмы обучения могут быть довольно сложными, и сегодня такие среды программирования, как 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.

Спасибо за чтение. Я надеюсь, что это будет полезно.