我在火炬中有以下lstm模型实现,我从这里开始: https://github.com/wojzaremba/lstm/blob/master/main.lua
我对以下代码有疑问:
local function create_network()
local x = nn.Identity()()
local y = nn.Identity()()
local prev_s = nn.Identity()()
local i = {[0] = LookupTable(params.vocab_size,
params.rnn_size)(x)}
local next_s = {}
local split = {prev_s:split(2 * params.layers)}
for layer_idx = 1, params.layers do
local prev_c = split[2 * layer_idx - 1]
local prev_h = split[2 * layer_idx]
local dropped = nn.Dropout(params.dropout)(i[layer_idx - 1])
local next_c, next_h = lstm(dropped, prev_c, prev_h)
table.insert(next_s, next_c)
table.insert(next_s, next_h)
i[layer_idx] = next_h
end
local h2y = nn.Linear(params.rnn_size, params.vocab_size)
local dropped = nn.Dropout(params.dropout)(i[params.layers])
local pred = nn.LogSoftMax()(h2y(dropped))
local err = nn.ClassNLLCriterion()({pred, y})
local module = nn.gModule({x, y, prev_s},
{err, nn.Identity()(next_s)})
module:getParameters():uniform(-params.init_weight, params.init_weight)
return transfer_data(module)
end
在lstm输入的嵌入部分,代码在处理ptb数据库时使用LookupTable
图层,现在我想知道如何使用LookupTable
定义其他嵌入到不同的数据类型。特别地,输入是RGB图像,并且嵌入将是CNN模型之一,例如没有完全连接层的AlexNet。 (https://gist.github.com/gcr/0bab9929dfee95164a4d)
对我来说,它看起来太模糊了。 为此目的有一个更好的设计? 如何在CNN模型上创建LSTM?