Wolfram Language

Redes neurais

Aprenda uma parametrização de uma variedade

Aprenda uma parametrização de uma variedade junto com os dados de entrada correspondentes usando autoencoder, uma rede com uma layer de "gargalo"que aprende a reconstruir a entrada original.

Amostras de dados de treinamento de uma parte de uma variedade sintéticos de duas dimensões.

Copiar para área de transferência.
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]=

Crie uma rede com uma camada de "gargalo" para aprender uma parametrização da variedade.

Copiar para área de transferência.
In[2]:=
Click for copyable input
net = NetChain[{25, Ramp, 1, 25, Ramp, 2}, "Input" -> 2]
Out[2]=

Crie uma rede de perda que calcula uma perda baseada no "erro de reconstrução"uma medida do grau em que a rede pode produzir uma saída que é idêntica à sua entrada.

Copiar para área de transferência.
In[3]:=
Click for copyable input
lossNet = NetGraph[{net, MeanSquaredLossLayer[]}, {1 -> 2, NetPort["Input"] -> NetPort[2, "Target"]}]
Out[3]=

Treine a rede de perda na variedade e extraia a rede original da rede de perda.

Copiar para área de transferência.
In[4]:=
Click for copyable input
lossNet = NetTrain[lossNet, <|"Input" -> manifold|>, BatchSize -> 4096]; trained = NetExtract[lossNet, 1];

Visualize como a rede projeta pontos arbitrários na variedade.

Copiar para área de transferência.
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 a rede em "codificador" e "decodificador" (o codificador parametriza pontos usando um único valor escalar, enquanto o decodificador reconstrói o ponto a partir desta parametrização).

Copiar para área de transferência.
In[6]:=
Click for copyable input
decoder = Drop[trained, 3] encoder = Take[trained, 3]
Out[6]=
Out[6]=

Coloque uma cor para cada ponto na variedade original por sua parametrização sob o codificador.

Copiar para área de transferência.
In[7]:=
Click for copyable input
ListPlot[Style[#, Hue[First[0.3 + encoder[#]]/3]] & /@ manifold]
Out[7]=

Obtenha a faixa da parametrização aplicando o codificador à variedade.

Copiar para área de transferência.
In[8]:=
Click for copyable input
{min, max} = MinMax[encoder[manifold]]
Out[8]=

Mostre a reconstrução acima desta faixa junto com a variedade original.

Copiar para área de transferência.
In[9]:=
Click for copyable input
Show[plot, ListLinePlot[Table[decoder[x], {x, min, max, .01}]]]
Out[9]=

Exemplos Relacionados

Saiba se tem acesso à Tecnologia Wolfram por meio de sua organização
×