Caffe couche d'échec de création d'
Je suis en train de charger dans la phase de TEST de la configuration de réseau qui a une mémoire de données de la couche d'abord, puis une couche de convolution. Le MemoryData création de couches réussit,
Mais le produit de convolution de la couche de la création échoue à l'emplacement suivant:
LOG(INFO) << "Creating layer " << param.name();
const string& type = param.type();
CreatorRegistry& registry = Registry();
CHECK_EQ(registry.count(type), 1) << "Unknown layer type: " << type
<< " (known types: " << LayerTypeList() << ")";
Imprimé d'erreur est:
F0519 14:54:12.494139 14504 layer_factory.php:77] échec de la Vérification:
de registre.count(t ype) == 1 (0 vs 1) Inconnu type de couche: Convolution
(types connus: MemoryData)
registre a une seule entrée, en effet avec MemoryData.
Lorsque le pied dans le registre les fonctions de création, il semble que cette première (et dernière, puisque c'est un singletone), appelé de
REGISTER_LAYER_CLASS(MemoryData);
dans memory_data_later.cpp.
Je vois similaire REGISTER_LAYER_CLASS
appels pour les autres couches, mais on dirait qu'ils ne sont jamais appelés.
Comment pourrais-je le résoudre?
Merci!
OriginalL'auteur rkellerm | 2015-05-19
Vous devez vous connecter pour publier un commentaire.
Cette erreur se produit lorsque vous tentez de lier caffe statiquement à un exécutable. Vous avez besoin de passer supplémentaires de l'éditeur de liens drapeaux assurez-vous que la couche de code d'enregistrement est inclus.
Si vous êtes en utilisant cmake prendre un coup d'oeil sur les Cibles.cmake:
Et puis l'endroit où vous créez votre cible:
Une solution rapide serait de construire et de lien caffe communes, lib au lieu de statique.
Voir aussi ce post.
Juste pour compléter ce pour MSVC compilation sur Windows:
Utilisation /OPT:NOREF ou /INCLUDE options du linker sur la cible exécutable ou une dll.
Dans IOS n'a pas de soutien Dynamique de la Bibliothèque.J'ai créé statique lib pour Caffe.Je me suis même erreur ci-dessus dans IOS. Comment avez-vous résolu cette erreur.?
vous pouvez appliquer le couplage, par exemple, le prototype d'un mannequin de la fonction dans un fichier d'en-tête (par exemple layer_factory.hpp), mise en oeuvre de la rpc qui son code n'est pas lié (par exemple layer_factory.cpp et en l'appelant de manière statique à l'intérieur de l'en-tête, il a été prototypée dans. Par exemple: dans layer_factory.hpp: int lf_foo(); static int lf_dummy = lf_foo(); dans layer_factory.cpp: int lf_foo() { return 0; }. Laid, mais il fonctionne.
Merci pour votre réponse.Donc, je déclare la fonction à layer_factory.hpp: int lf_foo() {static int lf_dummy = lf_foo(); }.Est-il juste?..Pouvez-vous dire de quelle façon vais-je déclarer le prototype de la méthode en "layer_factory.hpp" fichier d'en-tête.?
En fait /OPT:NOREF avec "l'Utilisation de la Bibliothèque de la Dépendance des Intrants" true travaillé pour moi. J'ai lu à ce sujet ici social.msdn.microsoft.com/Forums/vstudio/en-US/...
OriginalL'auteur Abai
Remplacer
-l$(PROJECT)
avec$(STATIC_LINK_COMMAND)
dans votre Makefile dans les endroits appropriés, et de supprimer l'inutile runtime chemin de chargement:-Wl,-rpath,$(ORIGIN)/../lib
.OriginalL'auteur nicodjimenez