原本代码是:第37行 self.load_embeddings()
应该写成下图中:34行那里self.embedding = nn.Embedding(self.vocab_size, self.embedding_dim)
其中:
1 self.vocab_size
是词汇表的大小,也就是所有可能的单词或标记的数量。例如,如果你有一个包含10,000个唯一单词的词汇表,那么 self.vocab_size
就是10,000。
2 self.embedding_dim
是嵌入向量的维度。例如,如果你设置 self.embedding_dim
为100,那么每个单词将被表示为一个100维的向量。
self.vocab_size = 1000:原本定义的self.vocab_size=1000,但报错“
IndexError: index out of range in self”,考虑把它换成50000,就好了
3 维度的转变:传入的x是(32,39),x = self.embedding(x)变成(32,39,100),self.embedding(x).transpose(1, 2)变成(32,100,39),其中32是batchsize,100是inchannel,39是张量的宽度,卷积核在这上面移动,由于卷积核分别是3,4,5,步长都是1,经过卷积变化得到的x分别是(32,100,37),(32,100,36),(32,100,35)较大的卷积核能够捕捉输入数据中更大范围的空间模式或特征,但需要的参数也更多,x = [F.relu(conv(x)) for conv in self.conv],x变成包含3个张量的列表,x = [F.max_pool1d(c, c.size(-1)).squeeze(dim=-1) for c in x],对列表中的每个x都进行池化,与卷积类似,都有核,作用对象也都是宽度,以x中的(32,100,37)为例,对37进行最大池化,得到(32,100,1),squeeze(dim=-1)的含义是,如果最后一维的值为1,就去除最后一维,由此x变成了包含3个(32,100)的列表,x = torch.cat(x, dim=1),x变成(32,300),x = self.fc(self.dropout(x)),fc是一个300,100的线性层,x变成(32,100)