我正在开发一个简单的模型来学习单词嵌入。为简单起见,假设我的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。 我希望整个模型的并行化将自动解决这一问题。关于如何解决此问题的任何想法?