多语言展示
当前在线:380今日阅读:113今日分享:31

【Mathematica】用NetTrain训练一个线性层

在训练神经网络的时候,线性层无论怎么训练,都只能得到一个线性函数。因此,这对于非线性问题,并不能起到很好地预测作用。
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

自己制作一组非线性的训练数据:data = Table[{m, n} -> 1.*Sqrt[m^2 + n^2], {m, -2, 2, 0.1},       {n, -2, 2, 0.1}] // Flatten // Union

2

在三维空间中,描述这些点:ListPlot3D[Join[#[[1]], {#[[2]]}] & /@ data, AspectRatio -> Automatic]

3

训练神经网络模型,采用线性网络进行训练:ted = NetTrain[LinearLayer[], data]

4

训练结果如下:

5

来测试一下这个神经网络:ted[data[[1, 1]]]与实际取值差得很多,这正是线性神经网络的弊端。

6

通过作图,可以更明显的显示这种方法的误差之大:Show[ListPlot3D[Join[#[[1]], {#[[2]]}] & /@ data,   AspectRatio -> Automatic, PlotStyle -> {Blue, Opacity[0.5]}],  Plot3D[ted[{x, y}], {x, -2, 2}, {y, -2, 2},   PlotStyle -> {Green, Opacity[0.5]}]]蓝色代表原始数据,绿色表示训练模型的预测结果。

注意事项

线性表达式,无论怎么加减,都是线性表达式,这是一个封闭现象。

推荐信息