Wolfram Language

Redes neuronales

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.

In[1]:=
Click for copyable input
manifold = Table[AngleVector[{x, 0.9 Pi x}] + x/20*RandomVariate[NormalDistribution[], 2], {x, 0, 1, 0.001}]; plot = ListPlot[manifold, PlotStyle -> Orange]
Out[1]=

Cree una red con una capa de "cuello de botella" con el fin de aprender una parametrización de una variedad.

In[2]:=
Click for copyable input
net = NetChain[{25, Ramp, 1, 25, Ramp, 2}, "Input" -> 2]
Out[2]=

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.

In[3]:=
Click for copyable input
lossNet = NetGraph[{net, MeanSquaredLossLayer[]}, {1 -> 2, NetPort["Input"] -> NetPort[2, "Target"]}]
Out[3]=

Entrene la red de pérdida en la variedad y extraiga la red original a partir de la red de pérdida.

In[4]:=
Click for copyable input
lossNet = NetTrain[lossNet, <|"Input" -> manifold|>, BatchSize -> 4096]; trained = NetExtract[lossNet, 1];

Visualice cómo la red proyecta puntos arbitrarios en la variedad.

In[5]:=
Click for copyable input
{{xmin, xmax}, {ymin, ymax}} = CoordinateBounds[manifold, .2]; Show[plot, StreamPlot[ trained[{x, y}] - {x, y}, {x, xmin, xmax}, {y, ymin, ymax}]]
Out[5]=

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).

In[6]:=
Click for copyable input
decoder = Drop[trained, 3] encoder = Take[trained, 3]
Out[6]=
Out[6]=

Coloree cada punto en la variedad original por su parametrización bajo el codificador.

In[7]:=
Click for copyable input
ListPlot[Style[#, Hue[First[0.3 + encoder[#]]/3]] & /@ manifold]
Out[7]=

Obtenga el rango de la parametrización aplicando el codificador a la variedad.

In[8]:=
Click for copyable input
{min, max} = MinMax[encoder[manifold]]
Out[8]=

Muestre la reconstrucción sobre este rango junto con la variedad original.

In[9]:=
Click for copyable input
Show[plot, ListLinePlot[Table[decoder[x], {x, min, max, .01}]]]
Out[9]=

Ejemplos relacionados

de en fr ja ko pt-br ru zh