1. lstm = nn.LSTM(input_size = input_size,
hidden_size = hidden_size,
num_layers = num_layers,
batch_first = True,
dropout = dropout,
bidirectional = True)
初始化定义lstm的模块,
2. hidden = (autograd.Variable(torch.randn(1, 1, 3)), autograd.Variable(torch.randn((1, 1, 3))))
隐藏层是一个元组形式,其第一个元素是LSTM的隐藏层输出,另一个元素维护了隐藏层的状态。
3. lstm_out, self.hidden = lstm(
embeds.view(len(sentence), 1, -1), hidden)
输入inputs和隐藏层hidden的数据
4. view
将一个tensor按照变换size,注意变换前后数据是不变的,变化的只是维度,如果每个维度上是-1,则代表是根据其他维度推导而来的;如果维度不一致,比如原来是3*4,变化为(7,-1)是会报错的。
5. 实现word embedding是通过一个函数来实现的:nn.Embedding
embeds = nn.Embedding(2, 5)
这里的2表示有2个词,5表示5维度,其实也就是一个2x5的矩阵,所以如果你有1000个词,每个词希望是100维,你就可以这样建立一个word embedding,nn.Embedding(1000, 100)
6. repeat 函数
x = torch.tensor([[1,2,3],[4,5,6]])
output(x): tensor([[1, 2, 3],
[4, 5, 6]])
y = x.repeat(1,2)
output(y): tensor([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
y.view(2,-1,3)
output: tensor([<