2 votes

LSTM au dessus de CNN

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 ?

0voto

fmguler Points 116

Torch nn.LookupTable est simplement en faisant Tenseur indice sur son Tenseur de poids. Dans le code que vous avez spécifié, il est également utilisé pour apprendre les vecteurs de mots, puisqu'il est inclus dans le modèle nngraph. Si vous avez un modèle pré-entraîné, vous pouvez définir ses poids sur LookupTable, mais cette fois, vous ne devez pas l'inclure dans le nngraph. Les dimensions du tenseur de poids devraient être nIndex (par exemple, le nombre d'images différentes que vous avez) x nOutput (par exemple, la taille cachée du LSTM - rnn_size dans votre code). Ou, vous n'avez pas besoin d'utiliser LookupTable du tout, vous pouvez spécifier le tenseur d'entrée directement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X