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

В Pytorch-Lightning обычно не требуется указывать cuda или gpu. Но когда я хочу создать тензор с гауссовой выборкой, используяtorch.normal я получил

RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

Итак, как мне изменить torch.normalтакой что пыторч-молния нормально работает? Поскольку я использую код на разных машинах, на процессоре и на графическом процессоре

centers = data["centers"] #already on GPU... sometimes...

lights = torch.normal(0, 1, size=[100, 3])
lights += centers

2 ответа

Решение

Рекомендуемый способ - сделать lights = torch.normal(0, 1, size=[100, 3], device=self.device)если это внутри класса молнии. Вы также можете:lights = torch.normal(0, 1, size=[100, 3]).type_as(tensor), где tensor это некоторый тензор, который находится на cuda.

Вы также можете использовать.to('device_name'):

      lights = torch.normal(0, 1, size=[100, 3]).to(centers.device)
centers += lights

Поскольку вы спросили о Pytorch-Lightning, стоит упомянуть, что такие методы, как.to(...)или.type_as(...)не связаны с этой структурой, поскольку исходят из факела.

Другие вопросы по тегам