J'ai un réseau de neurones convolutif simple, dont la sortie est une carte de caractéristiques 4x4 monocanal. Pendant l'entraînement, la perte (de régression) ne doit être calculée que sur une seule valeur parmi les 16 sorties. L'emplacement de cette valeur sera décidé après la passe avant. Comment puis-je calculer la perte à partir de cette seule sortie, tout en veillant à ce que tous les gradients non pertinents soient mis à zéro lors du back-prop.Torche: rétropropagation à partir de la perte calculée sur un sous-ensemble de la sortie
Disons que je le modèle simple suivant dans la torche:
require 'nn'
-- the input
local batch_sz = 2
local x = torch.Tensor(batch_sz, 3, 100, 100):uniform(-1,1)
-- the model
local net = nn.Sequential()
net:add(nn.SpatialConvolution(3, 128, 9, 9, 9, 9, 1, 1))
net:add(nn.SpatialConvolution(128, 1, 3, 3, 3, 3, 1, 1))
net:add(nn.Squeeze(1, 3))
print(net)
-- the loss (don't know how to employ it yet)
local loss = nn.SmoothL1Criterion()
-- forward'ing x through the network would result in a 2x4x4 output
y = net:forward(x)
print(y)
Je l'ai regardé nn.SelectTable et il semble que si je convertir la sortie sous forme de tableau, je serais en mesure de mettre en œuvre ce que je veux ?