原理部分网上很多,参考一篇总结博客:seq2seq学习笔记
可惜代码很少。因此我分享一篇我看了6个小时之后写的详细代码解析。
大约60行左右,希望大家耐心看下去。
子函数引入
状态初始化子函数layer:_createInitState
function layer:_createInitState(batch_size)
if not self.init_state then self.init_state = {} end
local times = 2 --2是怎么来的?因为LSTM有两个输入:1.新的输入 2.前一个状态的输入
for h = 1, self.num_layers*times do --假设num_layer=1
self.init_state[h] = torch.zeros(batch_size, self.rnn_size) --batch_size x 512 -- table
if self.on_gpu then
self.init_state[h] = self.init_state[h]:cuda()
end
end
self.num_state = #self.init_state --2*16*512
end
网络克隆子函数layer:createClones()
function layer:createClones()
print('constructing clones inside the D model')
self.clones =