Wolfram 언어

신경망

다양체의 매개 변수화 학습

"병목" 레이어를 지녔으며, 오리지널 입력을 재구축하는 법을 학습하는 네트워크의 자동 인코더를 사용하여 입력 데이터가 존재하는 다양체의 매개 변수화를 학습합니다.

합성의 이차원 다양체의 일부에서 훈련 데이터를 추출합니다.

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

다양체의 매개 변수화를 배우기 위해 "병목" 레이어가 포함된 네트워크를 생성합니다.

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

네트워크가 입력과 동일한 출력을 생성할 수 있는 정도를 측정하는 "재구축 오류"를 기반으로 손실을 계산하는 손실 네트워크를 생성합니다.

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

다양체의 손실 네트워크를 훈련하고 손실 네트워크에서 오리지널 네트워크를 추출합니다.

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

네트워크가 특정 지점을 매니폴드에 투영하는 방법을 시각화합니다.

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

네트워크를 "인코더"와 "디코더" 네트워크로 분할합니다. 인코더는 단일 스칼라 값을 사용하여 점을 파라미터화하고 디코더는 이 파라미터화에서 점을 재구성합니다.

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

인코더 아래의 매개 변수화에 의해 오리지널 다양체의 각 점을 채색합니다.

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

인코더를 매니폴드에 적용하여 매개변수화의 범위를 얻습니다.

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

오리지널 매니폴드와 함께 이 범위에서 재구축을 표시합니다.

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

관련 예제

de en es fr ja pt-br ru zh