Квантование Pytorch RuntimeError: Попытка создать тензор с отрицательным измерением - PullRequest
0 голосов
/ 06 марта 2020

Я пробую модуль квантования pytorch. При выполнении stati c после обучающего квантования я следую следующей процедуре, подробно изложенной в документации:

  1. добавление модулей QuantStub и DeQuantStub
  2. Операции с плавкими предохранителями
  3. Укажите конфигурацию qauntification
  4. torch.quanization.prepare ()
  5. Откалибруйте модель, выполнив вывод для набора калибровочных данных
  6. torch.quanization.convert ()

Однако при калибровке модели после ее подготовки программа обрывается.

Ошибка появляется на последних полностью подключенных слоях. Кажется, что наблюдатели, представленные на графике, пытаются создать гистограмму отрицательного измерения.

Вот ошибка:

    x = self.fc(x)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/module.py", line 550, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/container.py", line 100, in forward
    input = module(input)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/module.py", line 550, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/container.py", line 100, in forward
    input = module(input)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/module.py", line 550, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/container.py", line 100, in forward
    input = module(input)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/module.py", line 552, in __call__
    hook_result = hook(self, input, result)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/quantization/quantize.py", line 74, in _observer_forward_hook
    return self.activation_post_process(output)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/nn/modules/module.py", line 550, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/quantization/observer.py", line 805, in forward
    self.bins)
  File "/home/juan/miniconda3/envs/sparse/lib/python3.6/site-packages/torch/quantization/observer.py", line 761, in _combine_histograms
    histogram_with_output_range = torch.zeros((Nbins * downsample_rate))
RuntimeError: Trying to create tensor with negative dimension -4398046511104: [-4398046511104]

Полностью подключенные построены как

* 1025. *

Они добавляются в fc(x) как fc = nn.Sequential(*([LinearReLU, LinearReLU, ...]).

Однако я подозреваю, что это как-то связано с изменением формы между извилинами и полностью связанными слоями.

x = x.reshape(-1, size)

До сих пор я не смог решить эту ошибку.

Заранее спасибо

1 Ответ

0 голосов
/ 17 марта 2020

Для тех, у кого такая же проблема.

Решение находится в этой строке документации по квантованию pytorch:

Операции на основе вида, такие как view (), as_strided (), expand (), flatten (), select (), индексирование в стиле python и т. д. c - работает как обычный тензор (если квантование не для канала)

Проблема заключалась в том, что используя reshape и делая для каждого канала квантование. Если я сделаю mean из двух последних каналов, проблем не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...