J'ai traversé beaucoup de code de la torche récemment. J'ai remarqué, généralement après le modèle est construit, il est cloné, comme dans le code suivant:Pourquoi clonent-ils le modèle entier avant de s'entraîner au flambeau?
siamese_1=siamese_1:cuda()
parameters,gradParameters = siamese_1:getParameters()
siamese_2=siamese_1:clone('weight','bias','gradWeight','gradBias')
siamese_net:add(siamese_1)
siamese_net:add(siamese_2)
siamese_1
étant un modèle construit.
Il est difficile de comprendre pourquoi cela est-il fait?
Ce code sert à effectuer des réglages fins sur les réseaux. Est issu du référentiel this (ligne 122 à 126).
Dans ce code, le parallélisme réseau est déjà effectué au-dessus des lignes mentionnées. Je comprends que les paramètres sont clones sur un autre module ('siamese_2') mais pourquoi' siamese_1' est-il aussi ajouté à 'siamese_net'? – deepdebugging
non, les lignes 122 à 126 font le parallélisme. 'siamese_net' est un' ParallelTable' et par conséquent vous devez ajouter au moins 2 modules (en parallèle) à ce réseau. C'est pourquoi vous ajoutez à la fois 'siamese_1' et' siamese_2', qui sont par conséquent mis en parallèle dans le réseau 'siamese_net'. – fonfonx
Vrai, j'ai aussi découvert que les réseaux parallèles sont nécessaires car cette implémentation essaie de passer deux tenseurs de données en même temps. – deepdebugging