TensorFlow.js - это фреймворк для определения и выполнения вычислений с использованием тензоров в JavaScript. Тензор является обобщением векторов и матриц к более высоким измерениям.
Тензоры
Центральный блок данных в TensorFlow.js является tf.Tensor
: набор значений формы в массив одного или нескольких измерений. tf.Tensor
s очень похожи на многомерные массивы.
tf.Tensor
также содержит следующие свойства:
-
rank
: определяет , сколько размеры тензор содержит -
shape
: который определяет размер каждого измерения данных -
dtype
: который определяет тип данных тензора.
tf.Tensor
может быть создан из массива с tf.tensor()
метод:
// Create a rank-2 tensor (matrix) matrix tensor from a multidimensional array.
const a = tf.tensor([[1, 2], [3, 4]]);
console.log('shape:', a.shape);
a.print();
// Or you can create a tensor from a flat array and specify a shape.
const shape = [2, 2];
const b = tf.tensor([1, 2, 3, 4], shape);
console.log('shape:', b.shape);
b.print();
По умолчанию, tf.Tensor
s будет иметь float32
dtype.
tf.Tensor
s также может быть создан с BOOL, int32, complex64 и струнной dtypes:
const a = tf.tensor([[1, 2], [3, 4]], [2, 2], 'int32');
console.log('shape:', a.shape);
console.log('dtype', a.dtype);
a.print();
TensorFlow.js также предоставляет набор удобных методов для создания случайных тензоров, тензоры , заполненных определенным значением, тензоры из HTMLImageElement
s, и многих других , которые вы можете найти здесь .
Изменение формы тензора
Количество элементов в tf.Tensor
является продуктом размеров в своей форме. Так как часто раз может быть несколько форм с одинаковым размером, что часто бывает полезно , чтобы иметь возможность изменения формы tf.Tensor
в другую форму того же размера. Это может быть достигнуто с reshape()
метод:
const a = tf.tensor([[1, 2], [3, 4]]);
console.log('a shape:', a.shape);
a.print();
const b = a.reshape([4, 1]);
console.log('b shape:', b.shape);
b.print();
Получение значений от тензора
Вы также можете получить значения из tf.Tensor
с помощью Tensor.array()
или Tensor.data()
методы:
const a = tf.tensor([[1, 2], [3, 4]]);
// Returns the multi dimensional array of values.
a.array().then(array => console.log(array));
// Returns the flattened data that backs the tensor.
a.data().then(data => console.log(data));
Мы также предоставляем синхронные версии этих методов, которые проще использовать, но они вызовут проблемы с производительностью в вашем приложении. В производственных приложениях всегда следует отдавать предпочтение асинхронным методам.
const a = tf.tensor([[1, 2], [3, 4]]);
// Returns the multi dimensional array of values.
console.log(a.arraySync());
// Returns the flattened data that backs the tensor.
console.log(a.dataSync());
Операции
В то время как тензоры позволяют хранить данные, операции (ops) позволяют манипулировать этими данными. TensorFlow.js также предоставляет широкий спектр операций, подходящих для линейной алгебры и машинного обучения, которые могут выполняться с тензорами.
Пример: вычисления х 2 из всех элементов в tf.Tensor
:
const x = tf.tensor([1, 2, 3, 4]);
const y = x.square(); // equivalent to tf.square(x)
y.print();
Пример: добавление элементов из двух tf.Tensor
сек поэлементно:
const a = tf.tensor([1, 2, 3, 4]);
const b = tf.tensor([10, 20, 30, 40]);
const y = a.add(b); // equivalent to tf.add(a, b)
y.print();
Поскольку тензоры неизменяемы, эти операции не меняют своих значений. Вместо этого, опс возвращение всегда возвращают новые tf.Tensor
с.
Вы можете найти список операций , TensorFlow.js опор здесь .
объем памяти
При использовании WebGL бэкенда, tf.Tensor
память должна управляться явно (не достаточно , чтобы позволить tf.Tensor
выйти за рамки для его памяти будет выпущена).
Для того, чтобы уничтожить память о tf.Tensor, вы можете использовать dispose()
метод или tf.dispose()
:
const a = tf.tensor([[1, 2], [3, 4]]);
a.dispose(); // Equivalent to tf.dispose(a)
Очень часто в приложении объединяют несколько операций в цепочку. Сохранение ссылки на все промежуточные переменные для их удаления может снизить удобочитаемость кода. Чтобы решить эту проблему, TensorFlow.js обеспечивает tf.tidy()
метод , который очищает все tf.Tensor
с, не возвращается функцией после его запуска, подобно тому, как локальные переменные очищены , когда функция выполняется:
const a = tf.tensor([[1, 2], [3, 4]]);
const y = tf.tidy(() => {
const result = a.square().log().neg();
return result;
});
В этом примере результат square()
и log()
будет автоматически удаляться. Результат neg()
не будет расположена так как это возвращаемое значение tf.tidy ().
Вы также можете получить количество тензоров, отслеживаемых TensorFlow.js:
console.log(tf.memory());
Печатается объект tf.memory()
будет содержать информацию о том , сколько памяти в настоящее время выделяется. Вы можете найти более подробную информацию здесь .