PyTorch: как правильно создать список nn.Linear () - PullRequest
0 голосов
/ 22 мая 2018

Я создал класс с nn.Module в качестве подкласса.

В моем классе я должен создать N чисел линейного преобразования, где N задано в качестве параметров класса.

Поэтому я действую следующим образом:

    self.list_1 = []

    for i in range(N):
        self.list_1.append(nn.Linear(self.x, 1, bias=mlp_bias))

В методе forward я вызываю эти матрицы (с list_1 [i]) и конкататирую результаты.

Две вещи:

1)

Несмотря на то, что я использую model.cuda (), эти линейные преобразования используются в процессоре, и я получаю следующую ошибку:

RuntimeError: Ожидаемый объект типа Variable [torch.cuda.FloatTensor] но обнаружил переменную типа [torch.FloatTensor] для аргумента # 1 'mat2'

Мне нужно сделать

self.list_1.append(nn.Linear(self.x, 1, bias=mlp_bias).cuda())

Это не требуется, если вместо этого, я делаю:

self.nn = nn.Linear(self.x, 1, bias=mlp_bias)

, а затем непосредственно использую self.nn.

2)

По более очевидной причине, когда я печатаю (модель) в моем основном,Линейные матрицы в моем списке не напечатаны.

Есть ли другой способ.может быть, используя bmm?Я нахожу это менее простым, и я действительно хочу, чтобы мои результаты N были отдельно.

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

M

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать nn.ModuleList для переноса списка линейных слоев, как объяснено здесь

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