Je suis un débutant et je ne sais pas trop comment nous pouvons choisir un modèle pré-entraîné qui améliorera mon modèle.
J'essaie de créer un classificateur de race de chat en utilisant des poids pré-entraînés d'un modèle, disons VGG16 formé sur un ensemble de données de chiffres, cela améliorera-t-il les performances du modèle? ou si j'entraîne mon modèle uniquement sur la base de données sans utiliser d'autres poids, ce sera mieux, ou les deux seront les mêmes car ces poids pré-entraînés ne seront qu'un point de départ.
Aussi, si j'utilise les poids du VGG16 formés pour les données de chat contre chien comme point de départ de mon modèle de classification de race de chat, cela m'aidera-t-il à améliorer le modèle?
4 Réponses :
Pourriez-vous fournir plus d'informations, que souhaitez-vous classer exactement? Je vois que vous souhaitez classer des images, quel type d'images (contenant quoi?) Et dans quelles classes?
En guise de remarque générale: si vous utilisez un modèle entraîné, il doit bien sûr répondre à vos besoins. Gardez à l'esprit qu'un modèle qui a été formé sur un ensemble de données donné n'a appris que les informations contenues dans cet ensemble de données et peut classer / identifier des informations analogues à celles de l'ensemble de données d'entraînement.
Si vous souhaitez classer une image contenant un animal avec un classificateur Y / N (binaire), (chat ou non chat), vous devez utiliser un modèle formé sur différents animaux, parmi lesquels des chats.
Si vous souhaitez classer une image d'un chat en classes correspondant à des races de chats, disons, vous devez utiliser un modèle formé uniquement sur des images de chats.
Je devrais dire que vous devriez utiliser un pipeline, contenant les étapes 1. suivies de 2.
cela dépend vraiment de la taille de l'ensemble de données que vous avez sous la main et de la relation entre la tâche et les données sur lesquelles le modèle a été pré-entraîné et votre tâche et vos données. En savoir plus sur Transfer Learning http://cs231n.github.io/transfer-learning/ ou Domain Adaptation si votre tâche est la même.
J'essaie de créer un classificateur de race de chat en utilisant des poids pré-entraînés d'un modèle, disons VGG16 formé sur un ensemble de données de chiffres, cela améliorera-t-il les performances du modèle?
Il y a des caractéristiques générales qui sont encore apprises à partir de chiffres comme la détection des contours qui pourraient être utiles pour votre tâche cible, donc la réponse ici est peut-être. Vous pouvez ici essayer de simplement entraîner les couches supérieures, ce qui est courant dans les applications de vision par ordinateur.
Aussi, si j'utilise les poids du VGG16 formés pour les données de chat contre chien comme point de départ de mon modèle de classification de race de chat, cela m'aidera-t-il à améliorer le modèle?
Vos chances devraient être meilleures si la tâche et les données sont plus liées et similaires
Puisque vous avez mentionné que vous êtes un débutant, j'essaierai d'être un peu plus bavard que d'habitude, alors soyez indulgents avec moi.
L'image ci-dessous du blog Keras montre comment les couches initiales apprennent à représenter des choses simples comme des points et des lignes et à mesure que nous approfondissons, elles commencent à apprendre à représenter des modèles plus complexes.
En savoir plus sur les filtres de conv net sur le blog de keras ici
Lorsque nous entraînons un modèle, nous perdons beaucoup de temps et de calcul à la création initiale de ces représentations et pour obtenir ces représentations, nous avons également besoin de beaucoup de données, sinon nous ne serons peut-être pas en mesure de capturer toutes les fonctionnalités pertinentes et notre modèle pourrait ne pas l'être. aussi précis.
Donc, quand nous disons que nous voulons utiliser un modèle pré-entraîné, nous voulons utiliser ces représentations, donc si nous utilisons un modèle entraîné sur imagenet qui a beaucoup de photos de chat, nous pouvons être sûrs que le modèle a déjà des représentations pour identifier les caractéristiques importantes nécessaires identifier un chat et convergera vers un meilleur point que si nous utilisions des poids aléatoires.
Ainsi, lorsque nous disons d'utiliser des poids pré-entraînés, nous voulons dire utiliser les couches qui contiennent les représentations pour identifier les chats mais rejeter la dernière couche (dense et sortie) et ajouter à la place des couches denses et de sortie fraîches avec des poids aléatoires. Ainsi, nos prédictions peuvent utiliser les représentations déjà apprises.
Dans la vraie vie, nous gèlons nos poids pré-entraînés lors de la formation initiale car nous ne voulons pas que nos poids aléatoires en bas ruinent les représentations apprises. on ne gèle les représentations à la fin qu'après avoir une bonne précision de classification pour les affiner, et cela aussi avec un très faible taux d'apprentissage.
Choisissez toujours les poids pré-entraînés dont vous savez qu'ils ont le plus de représentations qui peuvent vous aider à identifier la classe qui vous intéresse.
Alors, est-ce que l'utilisation de pondérations entraînées par des chiffres mnist donnera des résultats relativement mauvais par rapport à celle formée sur image net?
Oui, mais étant donné que les couches initiales ont déjà appris des modèles simples comme des lignes et des courbes pour les chiffres, l'utilisation de ces poids vous mettra toujours un avantage par rapport au départ de zéro dans la plupart des cas.
Les poids pré-entraînés à choisir dépendent du type de classes que vous souhaitez classer. Depuis, vous souhaitez classer les races de chats, utilisez des poids pré-entraînés à partir d'un classificateur formé à une tâche similaire. Comme mentionné par les réponses ci-dessus, les couches initiales apprennent des choses comme les arêtes, les lignes horizontales ou verticales, les taches, etc. Au fur et à mesure que vous approfondissez, le modèle commence à apprendre les fonctionnalités spécifiques aux problèmes. Ainsi, pour les tâches génériques, vous pouvez utiliser, par exemple, imagenet, puis l'ajuster en fonction du problème en question.
Cependant, avoir un modèle pré-entraîné qui ressemble étroitement à vos données d'entraînement aide énormément. Il y a quelque temps, j'avais participé au Scene Classification Challenge où nous avons initialisé notre modèle avec les poids ResNet50 formés sur le jeu de données Places365. Étant donné que les classes du défi ci-dessus étaient toutes présentes dans l'ensemble de données Places365, nous avons utilisé les pondérations disponibles ici et affiné notre modèle. Cela nous a donné un grand coup de pouce dans notre précision et nous nous sommes retrouvés aux premières places du classement. Vous pouvez trouver plus de détails à ce sujet dans ce blog
Comprenez également que l'un des avantages de l'apprentissage par transfert est d'économiser les calculs. Utiliser un modèle avec des poids initialisés au hasard revient à entraîner un réseau neuronal à partir de zéro. Si vous utilisez des poids VGG16 formés sur un ensemble de données de chiffres, il se peut qu'il ait déjà appris quelque chose, ce qui vous fera certainement gagner du temps d'entraînement. Si vous entraînez un modèle à partir de zéro, il apprendra éventuellement tous les modèles que les poids de classificateur de chiffres pré-entraînés auraient appris.
D'un autre côté, l'utilisation des poids d'un classificateur Dog-vs-Cat devrait vous donner de meilleures performances car il a déjà appris des fonctionnalités pour détecter par exemple les pattes, les oreilles, le nez ou les moustaches.