2016-01-10 1 views
1

Je suis un débutant à torch et à lua (comme n'importe qui qui a suivi mes derniers messages pourrait attester :) et ai la question suivante sur la fonction d'avant pour le gmodule objet (classe nngraph).Torche, réseaux de neurones - fonction forward sur l'objet gmodule - classe de ngraph

selon le code source (https://github.com/torch/nn/blob/master/Module.lua - comme GModule de classe hérite de nn.module) la syntaxe est:

function Module:forward(input) 
    return self:updateOutput(input) 
end 

Cependant, j'ai trouvé des cas où une table est passée en entrée, comme dans:

local lst = clones.rnn[t]:forward{x[{{}, t}], unpack(rnn_state[t-1])} 

où:

clones.rnn[t] 

lui-même est un objet GModule. À son tour, rnn_state [t-1] est une table avec 4 tenseurs. Donc à la fin, nous avons quelque chose de semblable à

result_var = gmodule:forward{[1]=tensor_1,[2]=tensor_2,[3]=tensor_3,...,[5]=tensor_5} 

La question est, en fonction de l'architecture du réseau, vous pouvez passer l'entrée - formaté comme tableau - non seulement à la couche d'entrée, mais aussi aux couches cachées?

Dans ce cas, vous devez vérifier que vous passez exactement une entrée par couche? (À l'exception de la couche de sortie)

Merci beaucoup

Répondre

0

J'ai finalement trouvé la réponse. La classe de module (ainsi que la classe héritée gmodule) a une entrée et une sortie. Cependant, l'entrée (ainsi que la sortie) n'a pas besoin d'être un vecteur, mais peut être une collection de vecteurs - cela dépend de la configuration du réseau neuronal, dans ce cas particulier c'est un réseau neuronal récursif assez complexe .

Donc, si le filet a plus d'un vecteur d'entrée, vous pouvez le faire:

result_var = gmodule:forward{[1]=tensor_1,[2]=tensor_2,[3]=tensor_3,...,[5]=tensor_5} 

où chaque tenseur/vecteur est l'un des vecteurs d'entrée. Un seul de ces vecteurs est le vecteur X ou le vecteur de caractéristiques. Les autres pourraient servir d'entrée à d'autres nœuds intermédiaires.

À son tour, result_var (qui est la sortie) peut avoir une sortie comme tensoriel (la prédiction) ou une collection de tenseurs comme sortie (une collection de tenseurs), en fonction de la configuration du réseau. Si tel est le cas, l'un de ces tenseurs de sortie est la prédiction, et le rappel est généralement utilisé comme entrée pour les noeuds intermédiaires dans le pas de temps suivant - mais cela dépend encore de la configuration nette.