Entraînez un réseau de planification de mouvement (MPNet), sur un environnement de carte unique, pour l'échantillonnage de l'espace d'état. Dans le cas d'un environnement à carte unique, vous utilisez une carte fixe pour former et tester le réseau. Ensuite, vous pouvez utiliser le réseau entraîné pour calculer des échantillons d'état entre n'importe quelle pose de départ et n'importe quelle pose d'objectif sur la carte. Tout d'abord, vous devez configurer un MPNet et former le réseau sur un petit ensemble de données. Utilisez la perte de formation pour évaluer la précision du réseau. Si vous entraînez le MPNet sur un vaste ensemble de données d'entraînement créé à l'aide de plusieurs environnements cartographiques, vous devez également calculer la perte de validation pour affiner la précision du réseau. Pour plus d'informations sur la façon de former le MPNet sur plusieurs environnements cartographiques pour l'échantillonnage de l'espace d'état, voir Train Deep Learning-Based Sampler for Motion Planning.
Charger et inspecter les données de formation
Chargez la carte d'entrée et les données d'entraînement dans l'espace de travail MATLAB® .
data = struct with fields:
trainData: {100×1 cell}
map: [1×1 binaryOccupancyMap]
Les données d'entraînement sont constituées d'échantillons d'état optimaux calculés pour plusieurs valeurs aléatoires de poses de départ et de poses d'objectif sur une carte de labyrinthe. Extrayez les données de formation de la structure de données.
Inspectez les données d’entraînement. Les données de formation sont un cell array de taille 100 x 1 contenant 100 échantillons d'état à utiliser pour la formation du réseau.
Lisez les échantillons d'état à partir des données d'entraînement. Tracez la carte d'entrée et les échantillons d'état d'entraînement.
Créer MPNet et définir les paramètres réseau
Créez un MPNet non entraîné à l'aide de l'objet mpnetSE2
.
mpnet =
mpnetSE2 with properties:
StateBounds: [3×2 double]
LossWeights: [1 1 1]
EncodingSize: [10 10]
NumInputs: 108
NumOutputs: 4
Network: [1×1 dlnetwork]
Visualisez le réseau. Pour mieux comprendre l'architecture du réseau, inspectez les couches du réseau et le nombre d'entrées dans chaque couche.
Définissez la propriété StateBounds
de l'objet mpnetSE2
sur les limites de la carte d'entrée.
Définissez la propriété EncodingSize
de l'objet mpnetSE2
sur 0
. Cela indique que la fonction ne doit pas coder la carte d'entrée pour entraîner le réseau. La définition de la propriété EncodingSize
sur 0
modifie la propriété NumInputs
du MPNet en 8
.
mpnet =
mpnetSE2 with properties:
StateBounds: [3×2 double]
LossWeights: [1 1 1]
EncodingSize: [0 0]
NumInputs: 8
NumOutputs: 4
Network: [1×1 dlnetwork]
Définissez la propriété LossWeights
de l'objet mpnetSE2
sur [10 10 0]
. Pour des valeurs de poids plus élevées, le réseau prend plus d’époques pour converger. Si l'entrée est un espace d'état SE(2), la valeur de poids pour la variable de l'espace d'étatest défini sur 0
.
Préparer les données de formation
Préparez les données de formation en convertissant les échantillons dans un format requis pour la formation du MPNet. La fonction mpnetPrepareData
redimensionne les valeurs des états de chemin optimaux dans la plage [0, 1] et les stocke en tant qu'objet datastore
à utiliser avec la fonction d'entraînement.
Former MPNet
Créez un objet trainingOptions
pour la formation du MPNet. Ces options de formation ont été choisies expérimentalement. Si vous utilisez un nouvel ensemble de données pour l'entraînement, vous devez modifier vos options d'entraînement pour obtenir la précision d'entraînement souhaitée.
Utilisez l'optimiseur Adam.
Définissez la taille des mini-lots d’entraînement sur 20.
Mélangez la datastore de formation à chaque époque.
Définissez le nombre maximum d'époques sur 50.
Entraînez le MPNet
en utilisant la fonction trainnet
. Spécifiez la fonction de perte et les options de formation comme entrées dans la fonction de formation. Pour des résultats optimaux, la perte d’entraînement doit converger vers zéro.
Iteration Epoch TimeElapsed LearnRate TrainingLoss
_________ _____ ___________ _________ ____________
1 1 00:00:02 0.001 6.2466
500 6 00:00:24 0.001 0.042451
1000 12 00:00:38 0.001 0.073534
1500 17 00:00:52 0.001 0.038856
2000 23 00:01:04 0.001 0.041173
2500 29 00:01:16 0.001 0.021427
3000 34 00:01:28 0.001 0.044795
3500 40 00:01:39 0.001 0.030961
4000 45 00:01:50 0.001 0.028537
4450 50 00:02:01 0.001 0.017648
Training stopped: Max epochs completed
Définissez la propriété Network
de l'objet mpnetSE2
sur le réseau entraîné.
Effectuer un échantillonnage de l'espace d'état à l'aide de MPNet formé
Spécifiez une pose de départ et une pose objectif pour lesquelles calculer des échantillons d’état.
Créez un objet d'espace d'état pour les limites d'état spécifiées.
Configurez l'objet stateSamplerMPNet
pour utiliser le MPNet formé pour l'échantillonnage de l'espace d'état. Transmettez l’environnement de la carte, l’état de départ et l’état objectif comme entrées à l’échantillonneur d’état. Définissez les limites du nombre maximum d’échantillons appris à prendre en compte à 50.
Générez 50 échantillons d’état entre le début et la pose d’objectif.
Tracez les échantillons d'état générés. Notez que les échantillons d'état générés sont concentrés entre les états de départ et d'objectif, et ne sont pas dispersés dans l'environnement de la carte. Vous pouvez réduire le temps de recherche et trouver rapidement les chemins optimaux en utilisant ces échantillons d’état comme bases pour la planification des mouvements.
Plus d'information
Vous pouvez également enregistrer le MPNet formé dans un fichier .mat
pour une utilisation ultérieure. Enregistrez le réseau formé, les poids de perte et d'autres paramètres de réseau dans le fichier .mat
. Pour plus d'informations sur l'utilisation d'un réseau pré-entraîné pour l'échantillonnage de l'espace d'état, voir Predict State Samples Using MPNet Trained on Single Environment.