Использование разреженных тензоров для подачи заполнителя для слоя softmax в TensorFlow

Кто-нибудь успешно пробовал использовать разреженные тензоры для анализа текста с TensorFlow? Все готово, и мне удается загрузить feed_dict в tf.Session для слоя Softmax с множеством массивов, но я не могу загрузить словарь с помощью SparseTensorValues.

Я не нашел ни одной документации об использовании разреженных матриц для обучения модели (например, softmax) с помощью Tensor Flow, что странно, поскольку методы классов SparseTensor и SparseTensorValues или TensorFlow.sparse_to_dense готовы для этого, но нет документации о том, как кормить feed_dict словарь значений в session.run(fetches,feed_dict=None) методе.

Большое спасибо,


person Eduardo Garrido    schedule 25.11.2015    source источник
comment
Я столкнулся с той же проблемой и выдвинул вопрос. Вы можете следить за этим, но я думаю, что это еще не решено .. github.com/tensorflow/tensorflow/issues / 342 Эбревдо предложил использовать embedding_lookup_sparse для разреженного умножения. Лично я думаю, что сейчас tenorflow поддерживает ограниченные разреженные операции.   -  person    schedule 28.11.2015


Ответы (1)


Я нашел способ помещать разреженные изображения в тензорный поток, включая пакетную обработку, если это может помочь.

Я создаю 4-мерную разреженную матрицу в словаре с размерами batchSize, xLen, ylen, zLen (где zLen равно 3 для цвета, например). Следующий псевдокод предназначен для пакета из 50 трехцветных изображений 32x96 пикселей. Значения - это интенсивность каждого пикселя. В приведенном ниже фрагменте я показываю первые 2 пикселя первой инициализируемой партии ...

shape = [50, 32, 96, 3]
indices = [[0, 20, 31, 0],[0, 22, 33, 1], etc...]
values = [12, 24, etc...]
batch = {"indices": indices, "values": values, "shape": shape}

При настройке вычислительного графа я создаю разреженный заполнитель правильных размеров.

images = tf.sparse_placeholder(tf.float32, shape=[None, 32, 96, 3])

«Нет» используется, поэтому я могу изменять размер партии.

Когда я впервые хочу использовать изображения, например чтобы передать в пакетную свертку, я конвертирую их обратно в плотный тензор:

images = tf.sparse_tensor_to_dense(batch) 

Затем, когда я буду готов запустить сеанс, например для обучения я передаю 3 компонента пакета в словарь, чтобы они были подхвачены sparse_placeholder:

train_dict = {images: (batch['indices'], batch['values'], batch['shape']), etc...}
sess.run(train_step, feed_dict=train_dict)                

Если вам не нужно выполнять пакетную обработку, просто оставьте первое измерение и удалите «none» из формы заполнителя.

Я не мог найти способа передать изображения в пакетном режиме в виде массива разреженных матриц. Это сработало, только если я создал 4-е измерение. Мне было бы интересно узнать об альтернативах.

Хотя это не дает точного ответа на ваш вопрос, я надеюсь, что он пригодится, поскольку я боролся с аналогичными проблемами.

person BobbyG    schedule 04.04.2017