赶紧上图:
加了负权重后,看上去终于不那么像台阶了,这时候2层神经网络的非线性能力开始显现出来了。下面把权重交给随机大帝:
- fc = FC(2, 100)
- fc2 = FC(100, 1)
- Z1 = np.array([fc.forward(d) for d in data])
- Z2 = np.array([fc2.forward(d) for d in Z1])
- Z2 = Z2.reshape((100,100))
- draw3D(X, Y, Z2,(75,80))
上图:
这时候的非线性已经非常明显了,我们不妨继续加几层看看DNN的厉害:
- fc = FC(2, 10)
- fc2 = FC(10, 20)
- fc3 = FC(20, 40)
- fc4 = FC(40, 80)
- fc5 = FC(80, 1)
- Z1 = np.array([fc.forward(d) for d in data])
- Z2 = np.array([fc2.forward(d) for d in Z1])
- Z3 = np.array([fc3.forward(d) for d in Z2])
- Z4 = np.array([fc4.forward(d) for d in Z3])
- Z5 = np.array([fc5.forward(d) for d in Z4])
- Z5 = Z5.reshape((100,100))
- draw3D(X, Y, Z5,(75,80))
这个图看上去又复杂了许多……
从上面的实验中可以看出,层数越高,非线性的“能力”确实越强,脑洞开得也越大。
知道了他的厉害,下回我们将详细聊下它的求解方法——反向传播(Back Propagation)。