используя DataParallel в Pytorch - PullRequest
0 голосов
/ 29 мая 2019

Я разрабатываю простую модель для изучения встраивания слов.Для простоты, скажем, у меня есть размер вокаба, равный 100, каждый вектор вложения имеет размер 3, а размер пакета равен 10. Каждое вложение будет опираться с помощью вложения двух слов до и после целевого слова.

ВпередПропустив, я написал функцию, ожидающую для ее ввода вектор, содержащий вложения 4 контекстных слов

 def __init__(self, vocab_size, embedding_dim):
    super(CBOW, self).__init__()
    self.embeddings = nn.Embedding(vocab_size, embedding_dim)
    self.linear1 = nn.Linear(4 * embedding_dim, 12)
    self.linear2 = nn.Linear(12, vocab_size)
def forward(self, inputs):
    embeds = self.embeddings(inputs).view((1, -1))
    out = F.relu(self.linear1(embeds))
    out = self.linear2(out)
    log_probs = F.log_softmax(out, dim=1)
    return log_probs

Затем я запускаю модель

model = CBOW(len(vocab), EMBEDDING_DIM).cuda()

model = nn.DataParallel(model, device_ids=[0])

Однако, когда я отправляю данные пакета, вход будет иметь 10 входов для передачи.Таким образом, он дает мне и ошибку, что он ожидает 4 * EMBEDDING_DIM, однако он получает 10 * 4 * EMBEDDING_DIM.Я ожидал, что распараллеливание всей модели автоматически позаботится об этом.Есть идеи, как решить эту проблему?

...