Одна горячая кодировка огромного трехмерного массива - PullRequest
0 голосов
/ 13 ноября 2018

В качестве заголовка мои данные выглядят так: ["test", "bob", "romeo"] - и т. Д. Просто случайные слова. Я преобразовал их в числа, основанные на позиции в алфавите для каждой буквы в слове, так что теперь это будет:

[[19, 4, 18, 19], [1, 14, 1], [17, 14, 12, 4, 14]]

и теперь я бы хотел его горячим кодированием

tf.one_hot(featuresVectors, longestWordLen)

в результате

ResourceExhaustedError: OOM when allocating tensor with shape[512996,62,62]

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Недостаточно памяти. Это означает, что на вашем устройстве недостаточно памяти для создания такого тензора. Учитывая, что размер вашей партии равен 512996, а размер вашей глубины равен 62, вы пытаетесь создать тензор 512996x62x62xsizeof(float): ~7.34Go !

Поскольку индексы никогда не будут больше 26. Вы можете попытаться использовать меньший тип данных для этого тензора, например int8: tf.one_hot(featuresVectors, longestWordLen, dtype=tf.int8). Это должно занять 512996x62x62x1: ~1.83 Go на вашем устройстве.

Если ваше устройство по-прежнему не может выделить тензор, вам придется уменьшить размер пакета. (Иначе количество слов)

0 голосов
/ 13 ноября 2018

У вас в основном не хватает памяти. Два подхода, которые могли бы помочь, - это использование меньшего количества функций (например, подсчитать слова и просто оставить верхние 10000 или около того и «неизвестный токен» для них), чтобы уменьшить размер одного снимка. Или вы можете использовать слой встраивания в вашу сеть и напрямую передавать целые числа.

...