Добавить Автора
WeChat и QQ: 862251340
Публичный аккаунт WeChat: coderpai
мой блог:пожалуйста, нажмите здесь
Сейчас планируется изучить Python API в tensorflow, что облегчит обучение в будущем.
Оригинальная ссылка
В этой главе представлен API для разреженных тензоров.
разреженное тензорное представление
Для многомерных разреженных данных TensorFlow обеспечивает разреженное тензорное представление. Используются значения в разреженном тензореIndexedSlices
Индекс используется для представления данных, которые могут представлять данные более эффективно.
class tf.SparseTensor
Объяснение: Эта функция предназначена для представления разреженного тензора.
Tensorflow использует три плотных тензора:indices
,values
,dense_shape
, чтобы представить разреженный тензор. В интерфейсе Python эти три тензора объединены в одинSparseTensor
class, если вы поменяете местами три плотных тензора, то, прежде чем продолжить,SparseTensor
Класс автоматически меняет местами три тензора.
В частности, разреженный тензор представляется какSparseTensor(values, indices, dense_shape)
:
-
indices
: двумерный тензор, тип данныхint64
, размерность данных[N, ndims]
. -
values
: одномерный тензор, тип данных произвольный, а размерность данных[N]
. -
dense_shape
: одномерный тензор, тип данных которогоint64
, размерность данных[ndims]
.
в,N
Указывает на наличие разреженного тензора вN
ценность,ndims
выражатьSparseTensor
измерение.
Соответствующий плотный тензор удовлетворяет:
dense.shape = dense_shape
dense[tuple(indices[i])] = values[i]
Как обычно,indices
Индексы в должны быть отсортированы в порядке возрастания.SparseTensor
Порядок трех плотных тензоров не соблюдается, вы можете перетасовать порядок,SparseTensor
Он будет отсортирован автоматически.
Например:
SparseTensor(values=[1, 2], indices=[[0, 0], [1, 2]], shape=[3, 4])
Тогда плотный тензор:
[[1, 0, 0, 0]
[0, 0, 2, 0]
[0, 0, 0, 0]]
tf.SparseTensor.__init__(indices, values, shape)
Объяснение: Целью этой функции является созданиеSparseTensor
.
Входные параметры:
-
indices
: двумерный тензор, тип данныхint64
, размерность данных[N, ndims]
. -
values
: одномерный тензор, тип данных произвольный, а размерность данных[N]
. -
dense_shape
: одномерный тензор, тип данных которогоint64
, размерность данных[ndims]
.
Выходные параметры:
* разреженный тензорSparseTensor
.
tf.SparseTensor.indices
Объяснение: Функция этой функции состоит в извлечении индекса ненулевого значения в плотной матрице.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=[1, 2], shape=[3, 4])
b = a.indices
sess = tf.Session()
print sess.run(a)
print sess.run(b)
sess.close()
Выходные параметры:
* Двумерный тензор, тип данныхint64
, размерность данных[N, ndims]
. в,N
представляет количество ненулевых значений в разреженном тензоре,ndims
Представляет ранг разреженного тензора.
tf.SparseTensor.values
Объяснение: Функция этой функции состоит в том, чтобы вынуть ненулевые значения из плотной матрицы.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=[1, 2], shape=[3, 4])
b = a.values
sess = tf.Session()
print sess.run(a)
print sess.run(b)
sess.close()
Выходные параметры:
* Одномерный тензор, тип данных произвольный.
tf.SparseTensor.dtype
Объяснение: Цель этой функции — вернуть тип элементов тензора.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.dtype
sess = tf.Session()
print b
sess.close()
Выходные параметры:
- Возвращает тип элементов тензора.
tf.SparseTensor.shape
Объяснение: Цель этой функции — вернуть размерность разреженного тензора.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.shape
sess = tf.Session()
print sess.run(b)
sess.close()
Выходные параметры:
- Возвращает размерность разреженного тензора.
tf.SparseTensor.graph
Объяснение: Цель этой функции — вернуть граф, содержащий этот разреженный тензор.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.graph
sess = tf.Session()
print b
sess.close()
Выходные параметры:
- Верните граф, содержащий этот разреженный тензор.
class tf.SparseTensorValue
Объяснение: Эта функция предназначена для просмотра значения заданного разреженного тензора.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensorValue(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
sess = tf.Session()
print a
print a[0]
print a[1]
print a[2]
sess.close()
tf.SparseTensorValue.indices
Объяснение: Цель этой функции — вернуть существующую позицию значения в разреженном тензоре.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensorValue(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
sess = tf.Session()
print a.indices
sess.close()
Выходные параметры:
- Возвращает, где значения существуют в разреженном тензоре.
tf.SparseTensorValue.shape
Объяснение: Цель этой функции — вернуть размерность разреженного тензора.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensorValue(values=tf.constant([1, 2]), indices=[[4, 1], [1, 2]], shape=[3, 4])
sess = tf.Session()
print a.shape
sess.close()
Выходные параметры:
- Возвращает размерность разреженного тензора.
tf.SparseTensorValue.shape
Объяснение: Цель этой функции — вернуть элементы разреженного тензора.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensorValue(values=tf.constant([1, 2]), indices=[[4, 1], [1, 2]], shape=[3, 4])
sess = tf.Session()
print sess.run(a.values) # 这是一个张量,所以用sess.run()
sess.close()
Выходные параметры:
- Возвращает элементы разреженного тензора.
Преобразование разреженных тензоров в плотные тензоры
TensorFlow обеспечивает операции преобразования между разреженными и плотными тензорами.
tf.sparse_to_dense(sparse_indices, output_shape, sparse_values, default_value, name=None)
Объяснение: Роль этой функции заключается в преобразовании разреженного представления в плотный тензор. В частности, разреженный тензорsparse
Преобразовать в плотный тензорdense
следующее:
# If sparse_indices is scalar
dense[i] = (i == sparse_indices ? sparse_values : default_value)
# If sparse_indices is a vector, then for each i
dense[sparse_indices[i]] = sparse_values[i]
# If sparse_indices is an n by d matrix, then for each i in [0, n)
dense[sparse_indices[i][0], ..., sparse_indices[i][d-1]] = sparse_values[i]
по умолчанию,dense
значение заполнения вdefault_value
оба0
, если значение не задано как скаляр.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.sparse_to_dense(sparse_indices = [[1,2],[2,1]], output_shape = [3,3],
sparse_values = [2,3], default_value = 1)
sess = tf.Session()
print sess.run(a)
sess.close()
Входные параметры:
-
sparse_indices
: ОдинTensor
, тип данных должен бытьint32
илиint64
. Размерность данных 0-мерная, одномерная или двумерная, или более высокая широтаsparse_indices[i]
. -
output_shape
: ОдинTensor
, тип данных должен быть таким же, какsparse_indices
такой же. Размерность данных одномерна и представляет размерность выходного плотного тензора. -
sparse_values
: ОдинTensor
, размерность данных одномерная, каждый элемент которой соответствуетsparse_indices
Значение координат посередине. -
default_value
: ОдинTensor
, тип данных должен быть таким же, какsparse_values
Опять же, измерение данных является скаляром. Устанавливает разреженный индекс в неопределенное значение. -
name
: (необязательно) дать имя этой операции.
Выходные параметры:
- Один
Tensor
, тип данных иsparse_values
такой же. Размерность данных плотного тензора равнаoutput_shape
.
tf.sparse_tensor_to_dense(sp_input, default_value, name=None)
Объяснение: Функция этой функции состоит в преобразовании разреженного тензораSparseTensor
Преобразуйте в плотный тензор.
Эта операция является удобным способом преобразования разреженных тензоров в плотные тензоры.
Например,sp_input
Размерность данных[3, 5]
, ненулевое значение:
[0, 1]: a
[0, 3]: b
[2, 0]: c
default_value
значениеx
, то размерность выходного плотного тензора равна[3, 5]
, конкретная форма отображения выглядит следующим образом:
[[x a x b x]
[x x x x x]
[c x x x x]]
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_tensor_to_dense(a, default_value = 11)
sess = tf.Session()
print sess.run(b)
sess.close()
Входные параметры:
-
sp_input
: ОдинSparseTensor
. -
default_value
: измерение данных является скаляром, устанавливающим разреженный индекс в неопределенное значение. -
name
: (необязательно) устанавливает префикс для возвращаемых имен тензоров.
Выходные параметры:
- Плотный тензор с размерностью данных
sp_input.shape
, значение в плотном тензоре равноsp_input
значение, указанное в , значение без индекса равноdefault_value
ценность.
аномальный:
-
类型错误
: еслиsp_input
Не одинSparseTensor
, будет сообщено об ошибке.
tf.sparse_to_indicator(sp_input, vocab_size, name=None)
Объяснение: Функция этой функции состоит в преобразовании разреженного тензораSparseTensor
Координаты преобразуются в булевы координаты в плотном тензоре.
sp_input
Последнее измерение в отбрасывается, аsp_input
вместо значения этого бита, еслиsp_input.shape = [D0, D1, D2, ..., Dn, K]
,вK
это последнее измерение, тоoutput.shape = [D0, D1, D2, ..., Dn, vocab_size]
,в:
output[d_0, d_1, ..., d_n, sp_input[d_0, d_1, ..., d_n, k]] = True
output
Остальные значения равныFalse
.
Например,sp_input.shape = [2, 3, 4]
, ненулевые значения следующие:
[0, 0, 0]: 0
[0, 1, 0]: 10
[1, 0, 3]: 103
[1, 1, 2]: 112
[1, 1, 3]: 113
[1, 2, 1]: 121
иvocab_size = 200
, затем выводoutput.shape = [2, 3, 200]
,иoutput
Значения вFalse
, за исключением следующих мест:
(0, 0, 0), (0, 1, 10), (1, 0, 103), (1, 1, 112), (1, 1, 113), (1, 2, 121).
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_to_indicator(a, 10)
sess = tf.Session()
print sess.run(b)
sess.close()
Входные параметры:
-
sp_input
: ОдинSparseTensor
, тип данныхint32
илиint64
. -
vocab_size
:sp_Input
новое измерение последнего измерения, и0 <= sp_input.shape > vocab_size
. -
name
: (необязательно) устанавливает префикс для возвращаемых имен тензоров.
Выходные параметры:
- Модифицированный плотный булев тензор.
аномальный:
-
类型错误
: еслиsp_input
Не одинSparseTensor
, будет сообщено об ошибке.
Операции над разреженными тензорами
TensorFlow предоставляет некоторые операции с разреженными тензорами.
tf.sparse_concat(concat_dim, sp_inputs, name=None)
Объяснение: Функция этой функции заключается в преобразовании рядаSparseTensor
, объединить по указанному измерению.
Конкретная идея слияния состоит в том, чтобы сначала рассматривать разреженный тензор как плотный тензор, затем объединять тензоры в соответствии с указанной размерностью и, наконец, рассматривать объединенный плотный тензор как разреженный тензор.
Во входных данных,SparseTensor
Размеры данных должны быть одинаковыми, иindices
,values
иshapes
должны быть одинаковой длины.
Размерности выходных данных будут определяться размерностями входных данных, за исключением тех, которые необходимо объединить, которые представляют собой сумму всех данных в этом измерении.
Элементы выходного тензора будут восстановлены до разреженного тензора, отсортированного в исходном порядке.
Временная сложность этой операцииO(M log M)
,в,M
является суммой всех ненулевых элементов во входных данных.
Например, когдаconcat_dim = 1
Время:
sp_inputs[0]: shape = [2, 3]
[0, 2]: "a"
[1, 0]: "b"
[1, 1]: "c"
sp_inputs[1]: shape = [2, 4]
[0, 1]: "d"
[0, 2]: "e"
Тогда выходные данные:
shape = [2, 7]
[0, 2]: "a"
[0, 4]: "d"
[0, 5]: "e"
[1, 0]: "b"
[1, 1]: "c"
Графически представлено следующим образом:
[ a] concat [ d e ] = [ a d e ]
[b c ] [ ] [b c ]
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
aa = tf.SparseTensor(indices = [[1, 1], [1, 3], [2, 1]], values=[11,12,13], shape=[3, 5])
b = tf.sparse_concat(0, [a, aa])
sess = tf.Session()
print sess.run(b)
print sess.run(tf.sparse_tensor_to_dense(b))
sess.close()
Входные параметры:
-
concat_dim
: измерение, которое нужно объединить. -
sp_inputs
: тот, который нужно объединитьSparseTensor
список. -
name
: (необязательно) устанавливает префикс для возвращаемых имен тензоров.
Выходные параметры:
- объединенный
SparseTensor
.
аномальный:
-
类型错误
: еслиsp_inputs
Не одинSparseTensor
список.
tf.sparse_reorder(sp_input, name=None)
Объяснение: Целью этой функции являетсяSparseTensor
Элементы в переставлены, отсортированы по индексу от меньшего к большему.
перестановка не влияетSparseTensor
измерение.
Например, еслиsp_input
Размерность[4, 5]
,indices
/ values
следующее:
[0, 3]: b
[0, 1]: a
[3, 1]: d
[2, 0]: c
затем выводSparseTensor
размер все еще[4, 5]
,indices
/ values
следующее:
[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_reorder(a)
sess = tf.Session()
print sess.run(b)
sess.close()
Входные параметры:
-
sp_input
: ОдинSparseTensor
. -
name
: (необязательно) устанавливает префикс для возвращаемых имен тензоров.
Выходные параметры:
- Один
SparseTensor
, размерность данных и тип данных неизменны, только значения в нем упорядоченно отсортированы.
аномальный:
-
类型错误
: еслиsp_input
Не одинSparseTensor
.
tf.sparse_retain(sp_input, to_retain, name=None)
Объяснение: роль этой функции заключается в сохраненииSparseTensor
Непустой элемент, указанный в .
Например, еслиsp_input
Размерность данных[4, 5]
, и имеет 4 ненулевых значения следующим образом:
[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d
иto_retain = [True, False, False, True]
, то окончательные выходные данныеSparseTensor
Размерность данных[4, 5]
, и сохраните два ненулевых значения следующим образом:
[0, 1]: a
[3, 1]: d
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_retain(a, [False, False, True])
sess = tf.Session()
print sess.run(b)
sess.close()
Входные параметры:
-
sp_input
: ОдинSparseTensor
,ВключаютN
непустые элементы. -
to_retain
: логический вектор длиныN
, и который содержитM
КусокTrue
ценность.
Выходные параметры:
- Один
SparseTensor
, измерение данных совпадает с входными данными, которые содержатM
ненулевые значения, позиция которых основана наTrue
положение решать.
аномальный:
-
类型错误
: еслиsp_input
Не одинSparseTensor
.
tf.sparse_fill_empty_rows(sp_input, default_value, name=None)
Объяснение: Функция этой функции заключается в преобразовании двумерногоSparseTensor
, заполняет пустые строки значением указанного элемента.
Если в строке нет элемента, то координаты новой строки будут[row, 0]
заполнятьdefault_value
.
Например, мы предполагаемsp_input
Размерность данных[5, 6]
, а ненулевые значения следующие:
[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d
Поскольку в разреженном тензоре в первой и четвертой строке нет значений, то нам нужно[1, 0]
и[4, 0]
Заполните координатыdefault_value
,следующее:
[0, 1]: a
[0, 3]: b
[1, 0]: default_value
[2, 0]: c
[3, 1]: d
[4, 0]: default_value
Обратите внимание, что ввод может быть указан последним, но это не влияет на эту операцию.
выводSparseTensor
Это будет отсортированный порядок от меньшего к большему, а выходные данные и входные данные имеют одинаковые размерности данных.
Эта операция также возвращает логический вектор с логическими значениями, еслиTrue
значение, то строка добавляетdefault_value
,Рассчитывается следующим образом:
empty_row_indicator[i] = True iff row i was an empty row.
Пример использования:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
a = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[6, 5])
b, bb = tf.sparse_fill_empty_rows(a, 10)
sess = tf.Session()
print sess.run(b)
print '----'
print sess.run(bb)
sess.close()
Входные параметры:
-
sp_input
: ОдинSparseTensor
, размерность данных[N, M]
. -
default_value
: значение, тип данных иsp_input
такой же. -
name
: (необязательно) устанавливает префикс для возвращаемых имен тензоров.
Выходные параметры:
-
sp_ordered_output
: ОдинSparseTensor
, размерность данных[N, M]
, все пустые строки заполненыdefault_value
. -
empty_row_indicator
: логический вектор с длиной данныхN
, если строка заполненаdefault_value
, то логическое значение местоположения равноTrue
.
аномальный:
-
类型错误
: еслиsp_input
Не одинSparseTensor
.
CoderPai — это платформа, ориентированная на алгоритмический бой, с дизайном от базовых алгоритмов до алгоритмов искусственного интеллекта. Если вы заинтересованы в алгоритмическом бою, пожалуйста, следуйте за нами быстро. Присоединяйтесь к группе WeChat для реальных боевых действий AI, группе QQ для реальных боевых действий AI, группе WeChat по алгоритму ACM, группе QQ по алгоритму ACM. Для получения подробной информации, пожалуйста, обратите внимание на учетную запись WeChat «CoderPai» (coderpai).