Введение в TensorFlow.js
TensorFlow — это обучающая система искусственного интеллекта второго поколения, разработанная Google на основе DistBelief и получившая свое название от собственного принципа работы. Tensor (тензор) означает N-мерный массив, Flow (поток) означает вычисление на основе графа потока данных, TensorFlow — это процесс вычисления тензоров, перетекающих с одного конца графа потока на другой конец.
TensorFlow — это система, которая передает сложные структуры данных в нейронные сети искусственного интеллекта для анализа и обработки. Он широко используется во многих областях машинного обучения и глубокого обучения, таких как распознавание речи или изображений, и может работать на различных устройствах, начиная от смартфона и заканчивая тысячами серверов центров обработки данных.
Модель работы потока данных TensorFlow выглядит следующим образом:
TensorFlow.js — это библиотека javascript с открытым исходным кодом, ускоренная WebGL, для разработки проектов машинного обучения. Используя его, вы можете создавать CNN (сверточные нейронные сети), RNN (рекуррентные нейронные сети) и т. Д. В браузере и обучать эти модели, используя вычислительную мощность графического процессора терминала.
#Область исследования машинного обучения Итак, прежде чем изучать машинное обучение, нам нужно понять некоторые из этих концепций.
У нас есть два режима решения проблемы: один называется управляемым моделью.Изучая физические, химические и другие модели механизмов объекта, объект моделируется для решения проблемы, такой как известные три закона Ньютона, для вышеизложенного Эта формула состоит в том, что мы знаем входные данные x и модель механизма f(), и нам нужно решить y, который мы хотим получить; а другая называется управляемой данными (datadriven), так как люди сталкиваются все больше и больше сложные задачи, поиск объектов Стоимость модели механизма становится все больше и больше, а стоимость получения данных все меньше и меньше, поэтому исследователи стали думать о проблеме под другим углом, можно ли анализировать данные, чтобы получить то, что я хочу, то есть образцы, которые я знаю.(x,y) или я знаю только x, и я хочу проанализировать их, чтобы получить модель f() объекта, а затем, когда у меня есть x снова я могу получить то, что хочу, если не так строго Другими словами, все подобные методы анализа данных можно классифицировать как машинное обучение.
Таким образом, машинное обучение обычно должно включать в себя основные элементы: обучающие данные, модель с параметрами, функцию потерь, алгоритм обучения. Роль обучающих данных очевидна; модель с параметрами используется для аппроксимации f(); функция потерь является индикатором для измерения плюсов и минусов модели, таких как точность распознавания и классификации модели; алгоритм обучения также можно назвать функцией оптимизации, которая используется для постоянного обновления параметров модели, используемых для минимизации функции потерь и получения лучшей модели, или обучающейся машины. Далее будут представлены некоторые основные концепции машинного обучения, которые могут быть не очень последовательными.
Модель
Модель — это описание предметной области в реальном мире, а не описание дизайна программного обеспечения. В машинном обучении специфика модели несколько похожа: некоторые параметры для обучения используются для аппроксимации набора параметров f(), упомянутого выше. В пространстве параметров f() — это просто точка, и модель, о которой я говорил, тоже точка, а так как параметры могут быть изменены, все, что мне нужно сделать, это сделать эту точку моей модели как можно ближе к точка реального f() .
Существует множество модельных алгоритмов для машинного обучения, но наиболее часто используемые модели можно разделить на три типа:
- веб-модель: Наиболее типичным является нейронная сеть.Модель имеет несколько слоев, каждый слой имеет несколько узлов, и есть параметр, который можно изменить между каждыми двумя узлами.Благодаря большому количеству нелинейных нейронов нейронная сеть может аппроксимировать любую функцию .
- Модели, основанные на методах ядра: типичным является SVM и гауссовский процесс.SVM отображает входной вектор в многомерное пространство через ядро, а затем находит несколько гиперплоскостей для разделения данных на несколько категорий.Ядро SVM можно настроить.
- Модели, основанные на статистическом обучении: Простейшим примером является байесовская обучающая машина. Метод статистического обучения заключается в использовании математических инструментов математической статистики для реализации обучения обучающей машины. Обычно параметры в модели представляют собой некоторые статистические характеристики, такие как среднее значение и дисперсия, которые наконец, сделать прогноз правильной вероятности максимума.
В реальной жизни модели повсюду, такие как карты мира, диаграммы и т. д., которые можно считать моделями. Чтобы проиллюстрировать, что представляет собой модель, давайте возьмем пример: цена дома в Барселоне как функция количества комнат.
Затем мы представляем эти два данных на двумерном графике с одним параметром для каждой оси.Теперь, исходя из этого, мы прогнозируем цену дома на 6-ю комнату и более. Конечно, эта модель недостаточно хороша, в основном, в следующих аспектах:- Только с 5 образцами результаты недостаточно достоверны;
- Параметров всего два, но на самом деле факторов, влияющих на цену дома, больше, таких как географическое положение, возраст дома и т. д.;
Для первой проблемы мы можем решить ее, добавив количество выборок, например, добавив 1 миллион данных. Для второго вопроса мы можем добавить больше осей. В 2D-графике мы можем нарисовать прямую линию, в 3D-осях мы можем нарисовать плоскость.
Чтобы справиться с более чем 3D, например 4D или даже 1000000D, мы можем использовать математику и вычислительные гиперплоскости, чтобы справиться с этой ситуацией, и нейронные сети — хороший инструмент для решения этой проблемы.Нейронные сети
В биологии типичная структура нейронной сети в основном состоит из: дендритов, аксонов и синапсов.
- Дендриты: куда вводятся данные.
- Аксон: выходной терминал.
- Синапс: Структура, которая связывает нервы. Он отвечает за передачу электрических сигналов от концов нервных аксонов к дендритам близлежащих нервов. Эти синаптические структуры являются ключевыми для обучения, поскольку они увеличивают или уменьшают активность электрических сигналов при использовании.
в машинном обучении. Упрощенный нерв выглядит так:
В машинном обучении требуются следующие части:
- Вход: входной параметр.
- Вес: как и синапсы, они регулируют нейронную активность, увеличивая или уменьшая ее для достижения лучшей линейной регрессии.
- Линейная функция: каждый нерв похож на функцию линейной регрессии, поэтому для функции линейной регрессии нужен только один нерв.
- Функция активации: мы можем предоставить некоторые функции активации для перехода от одной скалярной (скалярной) к другой нелинейной функции. Например: сигмоид, RELU, танх.
- Выход: выходной результат вычисления функции активации.
Использование функций активации очень полезно, это суть нейронных сетей. Нейронная сеть не может быть очень умной без функции активации. Причина в том, что хотя у вас может быть много нейронов в сети, выход нейронной сети всегда будет линейной регрессией. Нам нужен какой-то механизм, чтобы изменить эту независимую линейную регрессию на нелинейную, чтобы решить нелинейную проблему. На следующем рисунке показан процесс преобразования линейной функции в нелинейную:
Обучите модель
В приведенном выше примере 2D-линейной регрессии достаточно нарисовать линию на графике, чтобы начать прогнозировать новые данные. Однако цель «глубокого обучения» состоит в том, чтобы наша нейронная сеть научилась рисовать эту линию. Вы можете обратиться к следующим ссылкам, чтобы узнать:Тренировочные модели
Чтобы нарисовать простую линию, очень простая нейронная сеть, в которую нам нужно включить только один нерв, является относительно простым случаем для обучения модели, но другие модели делают гораздо более сложные вещи, такие как классификация двух наборов данных, сложнее. Например, как «тренироваться, чтобы учиться» рисует следующее изображение:
Для приведенного выше случая это не очень сложно, каждая модель — это мир, и концепция обучения для всех этих моделей схожа. Первый — нарисовать случайную линию, затем уточнить ее в циклическом алгоритме, исправляя ошибки в каждом цикле. Этот алгоритм оптимизации также называется градиентным спуском, и существуют более сложные алгоритмы, такие как SGD и ADAM, которые имеют схожие концепции.Чтобы понять градиентный спуск, нам нужно знать, что каждый алгоритм (линейная регрессия, логистическая регрессия и т. д.) имеет другую функцию стоимости для измерения этих ошибок.
Функция стоимости всегда будет сходиться к некоторой точке, она может быть выпуклой или невыпуклой. Самая низкая точка сходимости будет найдена при ошибке 0%, и наша цель — достичь этой точки.
Но когда мы используем градиентный спуск, мы начинаем со случайной точки, но не знаем, где она. Представьте, что вы находитесь на горе, совершенно слепой, и тогда вам нужно шаг за шагом спуститься с горы до самой низкой точки. Если рельеф сложный (например, невыпуклая функция), процесс спуска будет более сложным.
Я не буду подробно объяснять, что такое алгоритм градиентного спуска. Вам просто нужно помнить, что это алгоритм оптимизации, используемый для обучения модели ИИ, чтобы минимизировать ошибку прогнозов. Этот алгоритм требует времени и GPU для вычисления матричного умножения. Точку сходимости обычно трудно достичь при первом запуске, поэтому нам нужно настроить некоторые гиперпараметры, такие как скорость обучения, или добавить некоторую регуляризацию.
После повторных градиентных спусков мы приблизились к точке сходимости, а уровень ошибок был близок к 0%. На данный момент наша модель успешно создана, и мы можем начать делать прогнозы.
Использование TensorFlow.js
##1, создайте нейронную сеть TensorFlow.js дает нам простой способ создания нейронных сетей. Сначала мы создадим класс LinearModel и добавим метод trainModel. Для этого типа модели я бы использовал последовательную модель, в которой выходные данные одного уровня являются входными данными следующего уровня, например, когда топология модели представляет собой простой стек без ответвлений и пропусков.
В методе trainModel мы определим слои (нужно использовать только один, чего достаточно для задачи линейной регрессии):
import * as tf from '@tensorflow/tfjs';
/**
* Linear model class
*/
export default class LinearModel {
/**
* Train model
*/
async trainModel(xs, ys){
const layers = tf.layers.dense({
units: 1, // Dimensionality of the output space
inputShape: [1], // Only one param
});
const lossAndOptimizer = {
loss: 'meanSquaredError',
optimizer: 'sgd', // Stochastic gradient descent
};
this.linearModel = tf.sequential();
this.linearModel.add(layers); // Add the layer
this.linearModel.compile(lossAndOptimizer);
// Start the model training!
await this.linearModel.fit(
tf.tensor1d(xs),
tf.tensor1d(ys),
);
}
...more
}
Использование этого класса выглядит следующим образом:
const model = new LinearModel();
// xs and ys -> array of numbers (x-axis and y-axis)
##2, Прогнозирование с помощью TensorFlow.js Часть прогнозирования обычно проще, обучение модели требует определения некоторых гиперпараметров, а делать прогнозы по сравнению с ними просто. Мы добавим этот метод в класс LinearRegressor:
import * as tf from '@tensorflow/tfjs';
export default class LinearModel {
...trainingCode
predict(value){
return Array.from(
this.linearModel
.predict(tf.tensor2d([value], [1, 1]))
.dataSync()
)
}
}
Затем мы вызываем функцию для заполнения параметров для прогнозирования:
const prediction = model.predict(500); // Predict for the number 500
console.log(prediction) // => 420.423
Разумеется, мы предоставляем онлайн-среду выполнения:стек blitz.com/edit/linear…
3. Используйте обученную модель
В TensorFlow.js можно использовать множество моделей, и вы можете создавать модели с помощью TensorFlow или Keras и импортировать их в TensorFlow.js. Например, вы можете использовать модель posenet (симуляция позы человека в реальном времени), чтобы делать некоторые забавные вещи:
адрес проекта:GitHub.com/Ари Али Рока/Бро…Его использование также очень простое, сначала импортируйте эту модель:import * as posenet from '@tensorflow-models/posenet';
// Constants
const imageScaleFactor = 0.5;
const outputStride = 16;
const flipHorizontal = true;
const weight = 0.5;
// Load the model
const net = await posenet.load(weight);
// Do predictions
const poses = await net
.estimateSinglePose(
imageElement,
imageScaleFactor,
flipHorizontal,
outputStride
);
Затем добавьте тестовые данные для модели:
{
"score": 0.32371445304906,
"keypoints": [
{
"position": {
"y": 76.291801452637,
"x": 253.36747741699
},
"part": "nose",
"score": 0.99539834260941
},
{
"position": {
"y": 71.10383605957,
"x": 253.54365539551
},
"part": "leftEye",
"score": 0.98781454563141
},
// ...And for: rightEye, leftEar, rightEar, leftShoulder, rightShoulder
// leftElbow, rightElbow, leftWrist, rightWrist, leftHip, rightHip,
// leftKnee, rightKnee, leftAnkle, rightAnkle
]
}
Вот пример кода:GitHub.com/AriAliRoca/FI…##4, Импорт модели из Keras Мы можем импортировать модель в TensorFlow.js извне, в следующем примере мы будем использовать модель Keras для распознавания цифр (формат файла — h5). Для этого нам нужно использовать tfjs_converter.
pip install tensorflowjs
Затем используйте инструмент преобразования:
tensorflowjs_converter --input_format keras keras/cnn.h5 src/assets
Теперь вы можете импортировать модель в свой код JS:
// Load model
const model = await tf.loadModel('./assets/model.json');
// Prepare image
let img = tf.fromPixels(imageData, 1);
img = img.reshape([1, 28, 28, 1]);
img = tf.cast(img, 'float32');
// Predict
const output = model.predict(img);
Всего несколькими строками кода вы можете использовать модель распознавания цифр в Keras. Конечно, мы также можем добавить еще немного забавной логики, например, добавить холст для рисования числа, а затем захватить изображение, чтобы распознать число.
адрес проекта:GitHub.com/AriAliRoca/Mn…Если аппаратное обеспечение не очень хорошее, обучение модели в браузере может быть очень неэффективным. TensorFlow.js использует интерфейс WebGL для ускорения обучения, но даже это в 1,5-2 раза медленнее, чем версия TensorFlow Python.
Однако до TensorFlow.js было практически невозможно использовать модели машинного обучения в браузере без взаимодействия с API. Теперь мы можем обучать и использовать модель в автономном режиме в нашем приложении. Кроме того, прогнозы делаются быстрее без необходимости взаимодействия с сервером.
Оригинальная ссылка:Ари Али Roca.com/2018/08/24/…Ссылаться на:Основные понятия машинного обучения Основные понятия TensorFlow.js