Що таке TensorFlow? Як це працює? Вступ і Archiтектура

Давайте почнемо цей посібник зі знайомства з TensorFlow:

Що таке TensorFlow?

TensorFlow це наскрізна платформа з відкритим кодом для створення програм машинного навчання. Це символічна математична бібліотека, яка використовує потік даних і диференційоване програмування для виконання різноманітних завдань, зосереджених на навчанні та висновках глибоких нейронних мереж. Це дозволяє розробникам створювати програми машинного навчання за допомогою різних інструментів, бібліотек і ресурсів спільноти.

Наразі найвідомішою бібліотекою глибокого навчання у світі є TensorFlow від Google. Продукт Google використовує машинне навчання в усіх продуктах, щоб покращити пошукову систему, переклад, підписи до зображень або рекомендації.

Приклад TensorFlow

Щоб навести конкретний приклад, користувачі Google можуть отримати швидший і точніший пошук за допомогою ШІ. Якщо користувач вводить ключове слово в пошуковому рядку, Google пропонує рекомендації щодо наступного слова.

Приклад TensorFlow
Приклад TensorFlow

Google хоче використовувати машинне навчання, щоб скористатися перевагами своїх масивних наборів даних і надати користувачам найкращий досвід. Три різні групи використовують машинне навчання:

  • Дослідники
  • Дані вчені
  • Програмісти

Усі вони можуть використовувати той самий набір інструментів, щоб співпрацювати один з одним і підвищувати свою ефективність.

Google не просто має будь-які дані; у них наймасовіший комп’ютер у світі, тому Tensor Flow було створено відповідно до масштабу. TensorFlow — це бібліотека, розроблена командою Google Brain Team для прискорення машинного навчання та дослідження глибоких нейронних мереж.

Його було створено для роботи на кількох центральних чи графічних процесорах і навіть мобільних операційних системах, і він має кілька оболонок кількома мовами, наприклад Python, C++ or Java.

Історія TensorFlow

Кілька років тому глибоке навчання почало перевершувати всі інші алгоритми машинного навчання, надаючи величезну кількість даних. Google побачив, що може використовувати ці глибокі нейронні мережі для покращення своїх послуг:

  • Gmail
  • фото
  • Пошукова система Google

Вони будують каркас, який називається Тензорний потік дозволити дослідникам і розробникам працювати разом над моделлю ШІ. Після розробки та масштабування він дозволяє багатьом людям використовувати його.

Вперше він був оприлюднений наприкінці 2015 року, а перша стабільна версія з’явилася в 2017 році. Це відкритий код під ліцензією Apache Open Source. Ви можете використовувати його, змінювати та поширювати модифіковану версію за певну плату, не сплачуючи нічого Google.

Далі в цьому посібнику з глибокого навчання TensorFlow ми дізнаємося про архітектуру TensorFlow і як працює TensorFlow.

Як працює TensorFlow

TensorFlow дає змогу будувати графіки потоків даних і структури, щоб визначити, як дані переміщуються через графік, приймаючи вхідні дані як багатовимірний масив під назвою Tensor. Це дозволяє побудувати блок-схему операцій, які можна виконати на цих вхідних даних, яка йде на одному кінці та надходить на іншому кінці як вихід.

TensorFlow Archiтектура

Архітектура Tensorflow складається з трьох частин:

  • Попередня обробка даних
  • Побудуйте модель
  • Тренуйте і оцінюйте модель

Його називають Tensorflow, оскільки він приймає вхідні дані як багатовимірний масив, також відомий як тензори. Ви можете побудувати свого роду блок-схема операцій (називаються графіком), які ви хочете виконати над цим входом. Вхідні дані надходять на один кінець, а потім проходять через цю систему кількох операцій і виходять на іншому кінці як вихід.

Ось чому він називається TensorFlow, тому що тензор входить, проходить через список операцій, а потім виходить з іншого боку.

Де може працювати Tensorflow?

Обладнання TensorFlow і вимоги до програмного забезпечення можна класифікувати на

Фаза розвитку: це коли ви тренуєте режим. Навчання зазвичай проводиться на настільному комп’ютері або ноутбуці.

Фаза запуску або фаза висновку: після завершення навчання Tensorflow можна запускати на багатьох різних платформах. Ви можете запустити його

  • Настільний біг Windows, macOS або Linux
  • Хмара як веб-сервіс
  • Мобільні пристрої, такі як iOS і Android

Ви можете навчити його на кількох машинах, а потім запустити на іншій машині, коли у вас буде навчена модель.

Модель можна навчити та використовувати як на графічних, так і на центральних процесорах. Графічні процесори спочатку були розроблені для відеоігор. Наприкінці 2010 року дослідники зі Стенфордського університету виявили, що GPU також дуже добре справляється з матричними операціями та алгеброю, тому робить їх дуже швидкими для виконання подібних обчислень. Глибоке навчання залежить від великої кількості множення матриць. TensorFlow дуже швидко обчислює множення матриці, оскільки воно записано C++. Хоча це реалізовано в C++, доступ до TensorFlow та керування ним можна здійснювати переважно іншими мовами, Python.

Нарешті, важливою особливістю TensorFlow є TensorBoard. The TensorBoard дозволяє графічно та візуально контролювати те, що робить TensorFlow.

Компоненти TensorFlow

Тензор

Назва Tensorflow безпосередньо походить від його основної структури: Тензор. У Tensorflow усі обчислення використовують тензори. Тензор - це a вектор or матриця n-вимірів, що представляє всі типи даних. Усі значення в тензорі містять ідентичний тип даних із відомим (або частково відомим) формувати. Форма даних - це розмірність матриці або масиву.

Тензор може бути створений із вхідних даних або результату обчислення. У TensorFlow усі операції виконуються всередині a графік. Графік — це набір обчислень, які виконуються послідовно. Кожна операція називається an оп-вузол і з’єднані між собою.

На графіку показано операції та зв’язки між вузлами. Однак він не відображає значення. Краєм вузлів є тензор, тобто спосіб заповнення операції даними.

діаграми

TensorFlow використовує структуру графів. Графік збирає та описує всі серії обчислень, виконаних під час навчання. Графік має масу переваг:

  • Це було зроблено для роботи на кількох центральних або графічних процесорах і навіть мобільній операційній системі
  • Переносимість графа дозволяє зберегти обчислення для негайного чи подальшого використання. Графік можна зберегти для виконання в майбутньому.
  • Усі обчислення на графіку виконуються шляхом з’єднання тензорів
    • Тензор має вузол і ребро. Вузол виконує математичну операцію та створює вихідні дані кінцевих точок. Ребра пояснюють вхідні/вихідні зв’язки між вузлами.

Чому TensorFlow популярний?

TensorFlow — це найкраща бібліотека з усіх, оскільки вона створена, щоб бути доступною для всіх. Бібліотека Tensorflow включає різні API для створення масштабної архітектури глибокого навчання, як-от CNN або RNN. TensorFlow заснований на обчисленні графів; це дозволяє розробнику візуалізувати побудову нейронної мережі за допомогою Tensorboad. Цей інструмент корисний для налагодження програми. Нарешті, Tensorflow створено для масштабного розгортання. Він працює на CPU та GPU.

Tensorflow користується найбільшою популярністю на GitHub порівняно з іншими фреймворками глибокого навчання.

TensorFlow Algorithms

Нижче наведено алгоритми, які підтримує TensorFlow:

Наразі TensorFlow 1.10 має вбудований API для:

  • Лінійна регресія: tf.estimator.LinearRegressor
  • Класифікація:tf.estimator.LinearClassifier
  • Класифікація глибокого навчання: tf.estimator.DNNClassifier
  • Глибоке навчання wipe і deep: tf.estimator.DNNLinearCombinedClassifier
  • Регресія бустерного дерева: tf.estimator.BoostedTreesRegressor
  • Розширена класифікація дерева: tf.estimator.BoostedTreesClassifier

Як працюють обчислення в TensorFlow

import numpy as np
import tensorflow as tf

У перших двох рядках коду ми імпортували tensorflow як tf. с Python, це звичайна практика використання короткої назви для бібліотеки. Перевагою є уникнення введення повної назви бібліотеки, коли нам потрібно її використовувати. Наприклад, ми можемо імпортувати tensorflow як tf і викликати tf, коли хочемо використовувати функцію tensorflow

Давайте попрактикуємося в елементарному робочому процесі Tensorflow на простих прикладах TensorFlow. Давайте створимо обчислювальний графік, який множить два числа.

У прикладі ми помножимо X_1 і X_2 разом. Tensorflow створить вузол для підключення операції. У нашому прикладі це називається множенням. Коли графік буде визначено, обчислювальні механізми Tensorflow помножать разом X_1 і X_2.

Обчислення працюють у TensorFlow
Приклад TensorFlow

Нарешті, ми запустимо сеанс TensorFlow, який запустить обчислювальний графік зі значеннями X_1 і X_2 і надрукує результат множення.

Давайте визначимо вхідні вузли X_1 і X_2. Коли ми створюємо вузол у Tensorflow, ми повинні вибрати, який тип вузла створити. Вузли X1 і X2 будуть вузлом-заповнювачем. Заповнювач призначає нове значення кожного разу, коли ми виконуємо обчислення. Ми створимо їх як вузол заповнювача TF.

Крок 1: Визначте змінну

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

Коли ми створюємо вузол-заповнювач, ми повинні передати тип даних, який буде додавати сюди числа, щоб ми могли використовувати тип даних з плаваючою комою, давайте використаємо tf.float32. Нам також потрібно дати цьому вузлу назву. Це ім’я з’явиться, коли ми будемо дивитися на графічні візуалізації нашої моделі. Давайте назвемо цей вузол X_1, передавши параметр name зі значенням X_1, а тепер визначимо X_2 таким же чином. X_2.

Крок 2. Визначте обчислення

multiply = tf.multiply(X_1, X_2, name = "multiply")

Тепер ми можемо визначити вузол, який виконує операцію множення. У Tensorflow ми можемо зробити це, створивши вузол tf.multiply.

Ми передамо вузли X_1 і X_2 до вузла множення. Він наказує tensorflow зв’язати ці вузли в обчислювальному графіку, тому ми просимо його отримати значення з x і y і помножити результат. Давайте також назвемо вузол множення multiply. Це повне визначення для нашого простого обчислювального графіка.

Крок 3: Виконайте операцію

Щоб виконувати операції в графі, ми повинні створити сеанс. У Tensorflow це робить tf.Session(). Тепер, коли у нас є сеанс, ми можемо попросити сеанс виконати операції на нашому обчислювальному графіку, викликавши session. Щоб запустити обчислення, нам потрібно використати run.

Коли виконується операція додавання, вона побачить, що їй потрібно отримати значення вузлів X_1 і X_2, тому нам також потрібно ввести значення для X_1 і X_2. Ми можемо зробити це, надавши параметр під назвою feed_dict. Ми передаємо значення 1,2,3 для X_1 і 4,5,6 для X_2.

Ми друкуємо результати за допомогою print(result). Ми повинні побачити 4, 10 і 18 для 1×4, 2×5 і 3×6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

Параметри завантаження даних у TensorFlow

Перший крок перед навчанням a алгоритм машинного навчання це завантажити дані. Існує два поширених способи завантаження даних:

1. Завантажити дані в пам'ять: Це найпростіший спосіб. Ви завантажуєте всі свої дані в пам’ять як єдиний масив. Ви можете написати a Python код. Ці рядки коду не пов’язані з Tensorflow.

2. Конвеєр даних Tensorflow: Tensorflow має вбудований API, який допомагає вам легко завантажувати дані, виконувати операції та подавати алгоритм машинного навчання. Цей метод працює дуже добре, особливо якщо у вас є великий набір даних. Наприклад, відомо, що записи зображень величезні і не вміщуються в пам'ять. Конвеєр даних самостійно керує пам'яттю

Який розчин використовувати?

Завантажити дані в пам'ять

Якщо ваш набір даних не надто великий, тобто менше 10 гігабайт, ви можете скористатися першим способом. Дані можуть поміститися в пам'ять. Ви можете використовувати відому бібліотеку Pandas для імпорту файлів CSV. Ви дізнаєтесь більше про панд у наступному уроці.

Завантажте дані за допомогою конвеєра Tensorflow

Другий метод працює найкраще, якщо у вас великий набір даних. Наприклад, якщо у вас є набір даних розміром 50 гігабайт, а ваш комп’ютер має лише 16 гігабайт пам’яті, тоді машина вийде з ладу.

У цій ситуації вам потрібно побудувати конвеєр Tensorflow. Конвеєр завантажуватиме дані пакетно або невеликими фрагментами. Кожна партія буде надана в конвеєр і буде готова до навчання. Побудова конвеєра є чудовим рішенням, оскільки дозволяє використовувати паралельні обчислення. Це означає, що Tensorflow навчатиме модель на кількох ЦП. Це сприяє обчисленню та дозволяє тренувати потужну нейронну мережу.

У наступних уроках ви побачите, як побудувати значний конвеєр для живлення вашої нейронної мережі.

У двох словах, якщо у вас є невеликий набір даних, ви можете завантажити дані в пам’ять за допомогою бібліотеки Pandas.

Якщо у вас великий набір даних і ви хочете використовувати кілька ЦП, то вам буде зручніше працювати з конвеєром Tensorflow.

Як створити конвеєр TensorFlow

Ось кроки для створення конвеєра TensorFlow:

У попередньому прикладі ми вручну додали три значення для X_1 і X_2. Тепер ми побачимо, як завантажити дані в Tensorflow:

Крок 1) Створіть дані

Перш за все, давайте використаємо бібліотеку numpy для генерації двох випадкових значень.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

Крок 2) Створіть заповнювач

Як і в попередньому прикладі, ми створюємо заповнювач з іменем X. Нам потрібно явно вказати форму тензора. У цьому випадку ми завантажимо масив лише з двома значеннями. Ми можемо записати форму як shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Крок 3) Визначте метод набору даних

Далі нам потрібно визначити набір даних, де ми можемо заповнити значення заповнювача x. Нам потрібно використовувати метод tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Крок 4) Створіть конвеєр

На четвертому кроці нам потрібно ініціалізувати конвеєр, куди будуть надходити дані. Нам потрібно створити ітератор за допомогою make_initializable_iterator. Ми називаємо це ітератором. Потім нам потрібно викликати цей ітератор, щоб подати наступний пакет даних, get_next. Ми називаємо цей крок get_next. Зверніть увагу, що в нашому прикладі є лише один пакет даних лише з двома значеннями.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

Крок 5) Виконайте операцію

Останній крок схожий на попередній приклад. Ми починаємо сеанс і запускаємо ітератор операції. Ми заповнюємо feed_dict значенням, згенерованим нумпі. Ці два значення заповнять заповнювач x. Потім ми запускаємо get_next, щоб надрукувати результат.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Підсумки

  • Значення TensorFlow: TensorFlow є найвідомішою бібліотекою глибокого навчання за останні роки. Практик, який використовує TensorFlow, може створити будь-яку структуру глибокого навчання, наприклад CNN, RNN або просту штучну нейронну мережу.
  • TensorFlow переважно використовують науковці, стартапи та великі компанії. Google використовує TensorFlow майже в усіх щоденних продуктах Google, включаючи Gmail, Photo і Google Search Engine.
  • Команда Google Brain розробила TensorFlow, щоб заповнити прогалину між дослідниками та розробниками продуктів. У 2015 році вони оприлюднили TensorFlow; його популярність швидко зростає. Зараз TensorFlow — це бібліотека глибокого навчання з найбільшою кількістю репозиторіїв на GitHub.
  • Практики використовують Tensorflow, оскільки його легко розгортати в масштабі. Він створений для роботи в хмарі або на мобільних пристроях, таких як iOs і Android.

Tensorflow працює в сесії. Кожен сеанс визначається графіком із різними обчисленнями. Простим прикладом може бути множення на число. У Tensorflow потрібні три кроки:

  1. Визначте змінну
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Визначте обчислення
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Виконайте операцію
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Однією з поширених практик у Tensorflow є створення конвеєра для завантаження даних. Якщо ви виконаєте ці п’ять кроків, ви зможете завантажити дані в TensorFLow:

  1. Створіть дані
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Створіть заповнювач
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Визначте метод набору даних
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Створіть конвеєр
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Виконайте програму
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))