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

В этой статье будет рассказано, как можно использовать TensorFlow для реализации, обучения и тестирования алгоритма линейной регрессии. Если вы понятия не имеете, что такое линейная регрессия, пожалуйста, прочитайте больше о том, как она работает, поскольку я не буду подробно рассматривать концепции линейной регрессии. Я также надеюсь, что вы настроили TensorFlow во время выполнения Python, чтобы начать работу.

Линейная регрессия

Линейная регрессия используется в машинном обучении, чтобы найти гипотезу (h), , которая наилучшим образом соответствует нашим входным данным обучения, которые являются непрерывными. Гипотеза для примера линейной регрессии может принимать форму:

h(t) = (theta).X + c

где X может быть матрицей размера [n x m].

Чтобы реализовать модель обучения на основе этого, нам нужен набор данных для обучения. Для простоты мы начнем с небольшого одномерного набора данных для ввода (X) и вывода (Y). Даже если ваши данные многомерны, вы можете кормить таким же образом.

X = [[1],[2],[3],[4]]

Y = [[3],[5],[7],[9]]

Начнем с TensorFlow

Определите наши переменные

Y = tf.placeholder(tf.float32, shape=[None, 1])
X = tf.placeholder(tf.float32, shape=[None, 1]) 

theta = tf.get_variable('theta', shape=[1], initializer=tf.ones_initializer())
c = tf.get_variable('c', shape=[1], initializer=tf.ones_initializer())

Мы определяем X и Y (наши входные и выходные данные) как tf.placeholder. Это сообщает графу Tensorflow, что мы используем X и Y в качестве заполнителей для наших входных и выходных данных, размерность равна единице, а количество пакетов в цикле обучения может варьироваться (shape = [None, 1]). Владельцы места не будут хранить значения, которые рассчитываются при запуске сеанса обучения.

Мы объявляем theta и c как tf.variable, поскольку они будут хранить значения, которые TensorFlow Graph вычисляет во время обучения. Мы даем им начальные значения единиц, и форма является одномерной.

Определите вычисления и оптимизатор

h = tf.add(tf.multiply(X, theta), c) 
cost = tf.reduce_mean(tf.squared_difference(Y, h)) 
optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(cost)
feed_dict = {X:[[1],[2],[3],[4]],Y:[[3],[5],[7],[9]]}

Мы инициализируем нашу гипотезу (h) как уравнение линейной регрессии с помощью методов tf.multiply и tf.add. (Если вы используете многомерные входные данные, вам придется использовать tf.matmul () для умножения, поскольку вы будете передавать матрицы)

Затем мы определяем нашу функцию затрат как сумму среднеквадратичной разницы между нашим прогнозом (h) и нашим фактическим результатом (Y).

Мы используем функцию Оптимизатора спуска градиента Tensorflow для вычисления градиентов, чтобы снизить стоимость нашей гипотезы. Мы также передаем 0,1 в качестве размера нашего шага обучения для градиентного спуска.

Мы создаем наши входные и выходные данные в виде словаря для передачи в узел-заполнитель.

n = 1000 
with tf.Session() as session:
    session.run(tf.global_variables_initializer())    
    for i in range(n):
        cst_summary = session.run(optimizer, feed_dict= feed_dict)

Теперь, когда у нас все заявлено, нам нужно создать tf.Session для запуска нашего примера линейной регрессии на графике TensorFlow. Мы создаем tf.Session, который запускает цикл из 1000 раундов обучения. В каждом раунде этого цикла мы говорим нашему сеансу запустить нашу переменную оптимизатора, которую мы объявили ранее.

Мы также передаем наш словарь ввода и вывода как feed_dict методу session.run. Это укажет Tensorflow заполнить значения из нашего feed_dict в наши узлы-заполнители X и Y.

pred = session.run(h, feed_dict={X:[[10]]})

После запуска цикла обучения мы можем ввести тестовое значение и проверить правильность нашего прогноза. Мы также можем напечатать нашу стоимость и тета в конце и проверить их значение.

Вы можете найти полный код здесь. Это также включает построение нашей функции стоимости для каждой итерации, а также то, как Tensorflow построил график.

После запуска кода вы можете запустить следующую команду, чтобы вызвать Tensorboard, который поможет вам визуализировать эти графики.

tensorboard --logdir=.