Обнуление весов в модели PyTorch работает только во время обучения, а не во время оценки - PullRequest
0 голосов
/ 04 ноября 2019

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

Для масок сокращения я использую логические матрицы. Перед каждым прямым вызовом я применяю эти матрицы для обнуления сокращенных весов, например:

self.embed_out.data[~self.embed_out_mask] = 0

, где self - модель, а embed_out и embed_out_mask - экземпляры torch.nn.Parameter. (. embed_out - это матрица весов, а embed_out_mask - соответствующая логическая маска сокращения с точно таким же размером.

Это прекрасно работает во время тренировки и дает ожидаемые результаты с точки зрения сходимости, потерь и т. Д., Которыесоответствовать результатам статьи.

Однако во время оценки та же самая строка выдает следующую ошибку:

  [stacktrace omitted]
  File "[omitted]", line 214, in forward
    self.embed_out.data[~self.embed_out_mask] = 0
RuntimeError: copy_if failed to synchronize: device-side assert triggered

Соответствующее утверждение, которое не удалось, выглядит следующим образом:

/pytorch/aten/src/THC/THCTensorIndex.cu:361: void indexSelectLargeIndex(TensorInfo<T, IndexType>, TensorInfo<T, IndexType>, TensorInfo<long, IndexType>, int, int, IndexType, IndexType, long) [with T = float, IndexType = unsigned int, DstDim = 2, SrcDim = 2, IdxDim = -2, IndexIsMajor = true]:
block: [173,0,0], thread: [127,0,0] Assertion `srcIndex < srcSelectDimSize` failed.

Это выглядит так, как будто произошла какая-то ошибка за пределами границ при использовании маски чернослива в качестве индекса, но я вручную проверил, что матрица веса и маска чернослива имеют одинаковый размер.

Что может быть причиной этой ошибки?

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