Могу ли я ввести байтовый тензор в мою модель RNN / LSTM? - PullRequest
0 голосов
/ 10 декабря 2018

Я разрабатываю модель RNN / LSTM, в которую я хочу закодировать последовательность в ByteTensor для экономии памяти, поскольку я ограничен очень узкой памятью.Однако, когда я это делаю, модель возвращает следующую ошибку:

Ожидаемый объект скалярного типа Byte, но получил скалярный тип Float для аргумента # 2 'mat2'

Так что, похоже, есть еще кое-что, что также должно быть байт-тензором, но я не знаю, что это такое, поскольку консоль только показывает ошибку в строке:

output = model(predictor)

1 Ответ

0 голосов
/ 10 декабря 2018

Это означает, что внутри model есть тензоры с плавающей запятой, которые используются для работы с вашим байтовым тензором (наиболее вероятные операнды при умножении матриц, сложениях и т. Д.).Я полагаю, что вы можете технически преобразовать их в байты, выполнив model.type(torch.uint8), но ваш подход рано или поздно потерпит неудачу - поскольку целые числа дискретны, невозможно использовать их в вычислениях градиента, необходимых для обратного распространения.uint8 значения могут быть использованы при глубоком обучении для улучшения производительности и использования памяти логического вывода в сети, которая уже обучена, но это продвинутый метод.Для этого задания лучше всего ставить регулярные float32 с.Если ваш графический процессор поддерживает его, вы также можете использовать float16 aka half, хотя это вносит дополнительную сложность, и я бы не советовал его для начинающих.

...