Entrene una red de planificación de movimiento (MPNet), en un entorno de mapa único, para el muestreo del espacio de estados. En el caso de un entorno de mapa único, se utiliza un mapa fijo para entrenar y probar la red. Luego, puede utilizar la red entrenada para calcular muestras de estado entre cualquier pose inicial y pose objetivo en el mapa. Primero, debe configurar un MPNet y entrenar la red en un pequeño conjunto de datos. Utilice la pérdida de entrenamiento para evaluar la precisión de la red. Si entrena MPNet en un gran conjunto de datos de entrenamiento creado utilizando múltiples entornos de mapas, también debe calcular la pérdida de validación para ajustar la precisión de la red. Para obtener información sobre cómo entrenar MPNet en múltiples entornos de mapas para muestreo de espacio de estados, consulte Entrene un muestreador basado en aprendizaje profundo para la planificación del movimiento.
Cargar e inspeccionar datos de entrenamiento
Cargue el mapa de entrada y los datos de entrenamiento en el espacio de trabajo de MATLAB® .
data = struct with fields:
trainData: {100×1 cell}
map: [1×1 binaryOccupancyMap]
Los datos de entrenamiento constan de muestras de estado óptimo calculadas para múltiples valores aleatorios de poses iniciales y poses de destino en un mapa de laberinto. Extraiga los datos de entrenamiento de la estructura de datos.
Inspeccionar los datos de entrenamiento. Los datos de entrenamiento son un arreglo de celdas de tamaño 100 por 1 que contiene 100 muestras de estado para usar en el entrenamiento de la red.
Lea las muestras de estado de los datos de entrenamiento. Trazar el mapa de entrada y las muestras del estado de entrenamiento.
Crear MPNet y establecer parámetros de red
Cree un MPNnet no entrenado utilizando el objeto mpnetSE2
.
mpnet =
mpnetSE2 with properties:
StateBounds: [3×2 double]
LossWeights: [1 1 1]
EncodingSize: [10 10]
NumInputs: 108
NumOutputs: 4
Network: [1×1 dlnetwork]
Visualiza la red. Para comprender mejor la arquitectura de la red, inspeccione las capas de la red y la cantidad de entradas a cada capa.
Establezca la propiedad StateBounds
del objeto mpnetSE2
a los límites del mapa de entrada.
Establezca la propiedad EncodingSize
del objeto mpnetSE2
en 0
. Esto indica que la función no debe codificar el mapa de entrada para entrenar la red. Establecer la propiedad EncodingSize
en 0
cambia la propiedad NumInputs
del MPNnet a 8
.
mpnet =
mpnetSE2 with properties:
StateBounds: [3×2 double]
LossWeights: [1 1 1]
EncodingSize: [0 0]
NumInputs: 8
NumOutputs: 4
Network: [1×1 dlnetwork]
Establezca la propiedad LossWeights
del objeto mpnetSE2
en [10 10 0]
. Para valores de peso más altos, la red tarda más épocas en converger. Si la entrada es un espacio de estados SE(2), el valor de peso para la variable del espacio de estadosse establece en 0
.
Preparar datos de entrenamiento
Prepare los datos de entrenamiento convirtiendo las muestras a un formato requerido para entrenar MPNet. La función mpnetPrepareData
reescala los valores de los estados de ruta óptimos al rango [0, 1] y los almacena como un objeto datastore
para usar con la función de entrenamiento.
Tren MPNet
Cree un objeto trainingOptions
para entrenar el MPNet. Estas opciones de formación se han elegido de forma experimental. Si utiliza un nuevo conjunto de datos para el entrenamiento, debe cambiar sus opciones de entrenamiento para lograr la precisión de entrenamiento deseada.
Utilice el optimizador Adam.
Establezca el tamaño de los minilotes de entrenamiento en 20.
Mezcla el almacén de datos de entrenamiento en cada época.
Establezca el número máximo de épocas en 50.
Entrene el MPNet
usando la función trainnet
. Especifique la función de pérdida y las opciones de entrenamiento como entradas a la función de entrenamiento. Para obtener resultados óptimos, la pérdida de entrenamiento debe converger a cero.
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
Establezca la propiedad Network
del objeto mpnetSE2
en la red entrenada.
Realice un muestreo del espacio de estados utilizando MPNet entrenado
Especifique una pose inicial y una pose objetivo para calcular muestras de estado.
Cree un objeto de espacio de estados para los límites de estado especificados.
Configure el objeto stateSamplerMPNet
para utilizar el MPNet entrenado para el muestreo del espacio de estados. Pase el entorno del mapa, el estado inicial y el estado objetivo como entradas al muestreador de estado. Establezca los límites para el número máximo de muestras aprendidas a considerar en 50.
Genera 50 muestras de estado entre las poses inicial y meta.
Trazar las muestras de estado generadas. Observe que las muestras de estado generadas se centran entre los estados inicial y objetivo, y no están dispersas por todo el entorno del mapa. Puede reducir el tiempo de búsqueda y encontrar rutas óptimas rápidamente utilizando estas muestras de estado como semillas para la planificación del movimiento.
Más información
También puede guardar el MPNnet entrenado en un archivo .mat
para uso futuro. Guarde la red entrenada, los pesos perdidos y otros parámetros de la red en el archivo .mat
. Para obtener información sobre cómo utilizar una red previamente entrenada para el muestreo del espacio de estados, consulte Predecir muestras de estado utilizando MPNnet entrenado en un solo entorno.