Преобразование кода из Python 2 в Python 3 - PullRequest
0 голосов
/ 02 апреля 2019

Я устанавливаю новый алгоритм, который объединяет детектор объектов (детектор ограничивающей рамки), который находится в Python 3, и генератор масок, который находится в Python 2. Проблема в том, что у меня есть несколько файлов Python 2, которые требуются дляалгоритм генерации маски.Поэтому я попытался 2to3 преобразовать все мои файлы Python 2 в Python 3. Сценарий выглядел как работающий, но поскольку это был алгоритм глубокого обучения (для генерации маски, когда координаты ограничивающего прямоугольника задаются в качестве входных данных), для которого требуются некоторые веса Pytorch, чтобызагружен, при тестировании модели в python 3 программа выдает ошибку типа

"RuntimeError: Ожидаемый объект типа torch.FloatTensor, но обнаружен тип torch.cuda.FloatTensor для аргумента # 2 'weight'"

Я искал на PyTorch форумах, но ни один из постов не был мне полезен.Это потому, что мой код генерации масок обучен на python 2?

Означает ли это, что при загрузке весов и тестировании модели я должен использовать python 2, а не python 3?Было бы здорово, если бы кто-то смог пролить свет на это.В качестве обходного пути я все еще могу использовать код детектора объектов, пониженный до Python 2. Но все же я хочу знать, почему он выдает ошибку.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я только что решил проблему, переустановив torch (0.4.0) и torchvision (0.2.1) для моей среды conda.Мне пришлось понизить версии обоих.Наконец, мне удалось преобразовать мой код Python 2.7 в Python 3. Благодаря библиотеке 2to3.На самом деле эта ошибка происходила в функции нормализации изображения PyTorch.Это была внутренняя функция, которая принимает массив изображений как тензоры.

tensor.sub_(mean[:, None, None]).div_(std[:, None, None]) 
RuntimeError: expected type torch.cuda.FloatTensor but got torch.FloatTensor
0 голосов
/ 03 апреля 2019

Проблема в том (может), что объект процессора ожидается, но это объект процессора.Попробуйте поместить объект в процессор:
mask.cpu()

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