Je regarde à travers le Caffe prototxt pour les réseaux résiduels profonds et j'ai remarqué l'apparition d'un "Scale"
couche.
layer {
bottom: "res2b_branch2b"
top: "res2b_branch2b"
name: "scale2b_branch2b"
type: "Scale"
scale_param {
bias_term: true
}
}
Cependant, cette couche n'est pas disponible dans le catalogue de couches Caffe . Quelqu'un peut-il expliquer la fonctionnalité de cette couche et la signification des paramètres ou pointer vers une documentation à jour pour Caffe?
Vous pouvez trouver une documentation détaillée sur caffe ici .
Spécifiquement pour "Scale"
couche le doc lit :
Calcule un produit de deux Blobs d'entrée, avec la forme de ce dernier Blob "broadcast" pour correspondre à la forme du premier. Équivaut à paver ce dernier Blob, puis à calculer le produit élément par élément.
La deuxième entrée peut être omise, auquel cas elle est apprise en tant que paramètre de la couche.
Il semble que, dans votre cas, (simple "bas"), cette couche apprenne un facteur d'échelle pour se multiplier "res2b_branch2b"
. De plus, puisque scale_param { bias_term: true }
signifie que la couche apprend non seulement un facteur d'échelle multiplicatif, mais aussi un terme constant. Ainsi, la passe avant calcule:
res2b_branch2b <- res2b_branch2b * \alpha + \beta
Pendant l'entraînement, le filet essaie d'apprendre les valeurs de \alpha
et \beta
.
Il y a aussi une documentation à ce sujet dans le fichier caffe.proto , vous pouvez rechercher 'ScaleParameter'.
Merci beaucoup pour votre message :) La couche d'échelle était exactement ce que je cherchais. Au cas où quelqu'un voudrait un exemple pour une couche qui évolue par un scalaire (0,5) puis "ajoute" -2 (et ces valeurs ne devraient pas changer):
layer {
name: "scaleAndAdd"
type: "Scale"
bottom: "bot"
top: "scaled"
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
scale_param {
filler {
value: 0.5 }
bias_term: true
bias_filler {
value: -2
}
}
}
(Probablement, les decay_mult ne sont pas nécessaires ici cependant. Mais ne sais pas. Voir les commentaires. ) Autre que cela:
"param {"
toujours (?) fait référence aux poids, le second au biais (lr_mult n'est pas spécifique à ScaleLayer)Tous tirés de caffe.proto. Et: je n'ai testé la couche ci-dessus qu'avec les deux valeurs de remplissage = 1,2.