在Pytorch中使用DataParallel

时间:2019-05-29 16:03:00

标签: parallel-processing pytorch word-embedding

我正在开发一个简单的模型来学习单词嵌入。为简单起见,假设我的vocab大小为100,每个嵌入向量的大小为3,批处理大小为10。每个嵌入将使用目标词前后两个词的嵌入进行倾斜。

在前向传递中,我编写了该函数以期望输入一个包含4个上下文词的嵌入的向量

CPerm(range('a', 'z'), 6, [], [ '*', 'a', 'e', '*' , '*' , '*' ]);

然后我启动模型

 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()

但是,当我发送批处理数据时,输入中将有10个输入要传递给转发。因此,它给了我一个错误,它期望的是4 * EMBEDDING_DIM,但是它得到的是10 * 4 * EMBEDDING_DIM。 我希望整个模型的并行化将自动解决这一问题。关于如何解决此问题的任何想法?

0 个答案:

没有答案