Aprenda una parametrización de una variedad
Aprenda una parametrización de una variedad junto con los datos de entradas correspondientes usando un autoencoder, una red con una capa de "cuello de botella" que reconstruya la entrada original.
Muestree datos de entrenamiento desde una parte de una variedad sintética de dos dimensiones.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_27.png)
manifold =
Table[AngleVector[{x, 0.9 Pi x}] +
x/20*RandomVariate[NormalDistribution[], 2], {x, 0, 1, 0.001}];
plot = ListPlot[manifold, PlotStyle -> Orange]
![](assets.es/learn-a-parameterization-of-a-manifold/O_22.png)
Cree una red con una capa de "cuello de botella" con el fin de aprender una parametrización de una variedad.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_28.png)
net = NetChain[{25, Ramp, 1, 25, Ramp, 2}, "Input" -> 2]
![](assets.es/learn-a-parameterization-of-a-manifold/O_23.png)
Cree una red de pérdida que calcule una pérdida basada en el "error de reconstrucción", una medida del grado en que la red puede producir una salida que es idéntica a su entrada.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_29.png)
lossNet =
NetGraph[{net, MeanSquaredLossLayer[]}, {1 -> 2,
NetPort["Input"] -> NetPort[2, "Target"]}]
![](assets.es/learn-a-parameterization-of-a-manifold/O_24.png)
Entrene la red de pérdida en la variedad y extraiga la red original a partir de la red de pérdida.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_30.png)
lossNet =
NetTrain[lossNet, <|"Input" -> manifold|>, BatchSize -> 4096];
trained = NetExtract[lossNet, 1];
Visualice cómo la red proyecta puntos arbitrarios en la variedad.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_31.png)
{{xmin, xmax}, {ymin, ymax}} = CoordinateBounds[manifold, .2];
Show[plot,
StreamPlot[
trained[{x, y}] - {x, y}, {x, xmin, xmax}, {y, ymin, ymax}]]
![](assets.es/learn-a-parameterization-of-a-manifold/O_25.png)
Divida la red en "codificador" y "decodificador" (el codificador parametriza los puntos usando un único valor de escala, mientras que el decodificador reconstruye el punto a partir de su parametrización).
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_32.png)
decoder = Drop[trained, 3]
encoder = Take[trained, 3]
![](assets.es/learn-a-parameterization-of-a-manifold/O_26.png)
![](assets.es/learn-a-parameterization-of-a-manifold/O_27.png)
Coloree cada punto en la variedad original por su parametrización bajo el codificador.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_33.png)
ListPlot[Style[#, Hue[First[0.3 + encoder[#]]/3]] & /@ manifold]
![](assets.es/learn-a-parameterization-of-a-manifold/O_28.png)
Obtenga el rango de la parametrización aplicando el codificador a la variedad.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_34.png)
{min, max} = MinMax[encoder[manifold]]
![](assets.es/learn-a-parameterization-of-a-manifold/O_29.png)
Muestre la reconstrucción sobre este rango junto con la variedad original.
![Click for copyable input](assets.es/learn-a-parameterization-of-a-manifold/In_35.png)
Show[plot, ListLinePlot[Table[decoder[x], {x, min, max, .01}]]]
![](assets.es/learn-a-parameterization-of-a-manifold/O_30.png)