Wolfram Language

Réseaux neuronaux

Apprenez une paramétrisation d'une variété

Apprenez une paramétrisation d'une variété avec des données d'entrées correspondant à l'aide d'un auto-encodeur, un réseau avec une couche de "goulot d'étranglement" qui reconstruit l'entrée d'origine.

Montrez des données d'apprentissage à partir d'exemples d'une partie d'une variété bidimensionnelle synthétique.

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]=

Créez un réseau avec une couche de "goulot d'étranglement" dans le but d'apprendre une paramétrisation de la variété.

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

Créez un réseau de perte qui calcule une perte sur la base du "erreur de reconstruction", une mesure du degré auquel le réseau peut produire une sortie qui est identique à son entrée.

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

Entraînez le réseau de perte sur la variété et extrayez le réseau d'origine à partir du réseau de perte.

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

Visualisez comment le réseau projette des points arbitraires sur le collecteur.

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]=

Divisez le réseau dans un "codeur" et le réseau "décodeur" (l'encodeur paramétrise les points en utilisant une valeur scalaire unique, alors que le décodeur reconstruit le point à partir de cette paramétrisation).

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

Coloriez chaque point dans la variété d'origine par son paramétrage sous l'encodeur.

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

Obtenez la plage de paramétrage en appliquant le codeur sur la variété.

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

Affichez la reconstruction sur cette plage avec la variété d'origine.

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

Exemples connexes

de en es ja ko pt-br ru zh