LSTM是由每个cell组成的,每个cell里有3个门:输入门、遗忘门、输出门;每个cell有4个前馈网络层,其实就是4个激活函数,分别是σ、σ、tanh、σ;这些前馈网络层里有神经元,即隐藏神经元,每个前馈网络层里的隐藏神经元个数都是相同的,即num_units,也写作hidden_size 每个ht的向量维度即为hidden_size 当前时刻t的输入是xt,xt的维度是input_size,或input_dim,xt的维度是自己定义的,在NLP中就是词向量的维度,每一列(每一个xt)代表一个词向量。 在LSTM中,每时刻既要考虑当前的输入,也要考虑以往的信息,因此向cell中输入的是ht-1和xt的组合,组合方式是concat(结合),其实就是把两者直接拼起来,比如ht-1是128位,xt是28位,则输入向量是156位。 LSTM的公式是: 由上式可见,每个前馈网络层都有两个参数,W和b,权重参数W的维度是[hidden_size+input_size,hidden_size],b的维度是hidden_size,因此每个cell的维度是[hidden_size+input_size,4*hidden_size] cell的权重是共享的,在num_steps个时刻的LSTM都是共享一套参数的,说是有num_steps个LSTM单元,其实只有一个,只不过对这个单元执行num_steps次 batch就是有多少个样本数据 time_steps是LSTM特有的,表示有多少个时刻的输入 Initial State是LSTM的隐藏状态和内部状态的一个输入的初始化。分别记作:h0和c0;输出可以通过设置,来决定是输出所有时序步的输出,还是只输出最后一个时序步的输出。Final_State是隐藏状态和内部状态的输出,记作:hn和cn seq_len是每个样本数据的长度 整体输入数据X的shape:(seq_len,batch,input_size),也可以在LSTM()中设置batch_first,使得X的输入格式要求变为(batch,seq_len,input_size) h0和c0的格式都是:(1,batch,hidden_size),或(batch,hidden_size) H的格式:(seq_len,batch,hidden_size),这种是输出所有时间步的隐藏状态,需要在LSTM()中设置return_sequences=True,否则默认只输出最后一个时间步的输出结果(1,batch,hidden_size) 如果只想要研究最后一个时间步的输出结果,只需在最后一个时间步添加全连接即可