Créer une structure de réseau multitâche dans Torch

Supplément à Torch7 Starter Sequel --- Utilisation du package nngraph

http://blog.csdn.net/hungryof/article/details/72902169

plus rapide-rcnn.torch

https://github.com/andreaskoepf/faster-rcnn.torch/blob/master/models/model_utilities.lua

https://github.com/torch/nngraph/blob/master/README.md


Accédez directement au code source:

À l'origine, nous avons utilisé séquentiel pour créer une structure de réseau sans succursale comme celle-ci.

require 'loadcaffe'

local cnn = loadcaffe.load('VGG_ILSVRC_19_layers_deploy_5.prototxt','VGG_ILSVRC_19_layers_5.caffemodel','nn'):float()

net = nn.Sequential()
for i = 1,3 do
net:add(cnn:get(i))
end

print(net:get(1).weight)

Nous allons maintenant utiliser nngraph pour créer une structure de réseau à deux branches comme celle-ci.

require 'nn'
require 'nngraph'
require 'loadcaffe'

local cnn = loadcaffe.load('VGG_ILSVRC_19_layers_deploy_5.prototxt','VGG_ILSVRC_19_layers_5.caffemodel','nn'):float()

local h1 = nn.Identity()()

net_same = h1 - cnn:get(1) - cnn:get(2)

net_1 = net_same - cnn:get(3) - cnn:get(4)
net_2 = net_same - cnn:get(3) - cnn:get(4)

gmod = nn.gModule({h1},{net_1,net_2})

print(gmod:get(2))

Le out obtenu par forward peut être divisé en deux: out [1] et out [2]

Si vous souhaitez les fusionner: out = {out [1], notre [2]}

D'autres sont les mêmes. Backward, updateGradInput, etc., utilisez-le simplement avec désinvolture.


S'il y a deux entrées, c'est tout.

h1 = - nn.Linear(20,20)
h2 = - nn.Linear(10,10)
hh1 = h1 - nn.Tanh() - nn.Linear(20,1)
hh2 = h2 - nn.Tanh() - nn.Linear(10,1)
madd = {hh1,hh2} - nn.CAddTable()
oA = madd - nn.Sigmoid()
oB = madd - nn.Tanh()
gmod = nn.gModule( {h1,h2}, {oA,oB} )

N'est-ce pas si simple, ahaha


Je suppose que tu aimes

Origine blog.csdn.net/Sun7_She/article/details/76348961
conseillé
Classement