J'ai l'implémentation du modèle lstm suivant dans torch, que j'ai pris d'ici : https://github.com/wojzaremba/lstm/blob/master/main.lua
J'ai une question concernant le morceau de code suivant :
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
Dans la partie d'encastrement de l'entrée lstm, le code utilise un LookupTable
lors de la manipulation de la base de données ptb, maintenant je me demande comment utiliser LookupTable
pour définir d'autres enchâssements pour différents types de données. En particulier, l'entrée est constituée d'images RVB et l'intégration sera l'un des modèles CNN, par exemple AlexNet, sans couches entièrement connectées. ( https://gist.github.com/gcr/0bab9929dfee95164a4d )
C'est trop flou pour moi. Existe-t-il un meilleur modèle pour cet objectif ? Comment puis-je créer un LSTM au-dessus d'un modèle CNN ?