1. Why Deep Learning?
当使用参数相等时,构建多层Neurals比一层Neural准确率更高,如下图:
因为Deep -> Modularization,在training data时,Deep Learning会自动构建模组化的函数。
模组化函数是会在Training data时机器自己构建,不需要人为去设计,这很大的提高了效率。
在做复杂的数据转换时,模组化函数效果显著,例如:从下面第一组图片上看,两者很像,但是实际却完全不一样,第二组图片,看起来不一样,实际上一样,要让机器知道这些,简单个Neural很难完成这个任务,只有构建多层的Neurals,构建模组化函数,才能有效的解决这个问题。为什么有效? 我个人认为模组化函数,一层一层的分工,即使输入很像/差距较大,经过模组化函数处理后,会放大差异/放大联系,这中间过程很复杂,但其实机器会自己找到最合适的函数,这些复杂的函数不需要人为构造,我们只需设计合适的Neural network,这也是Deep Learning的优势所在。
1.1 自建Deep Learning网络练习
建立模型,并用下图数据验证模型的正确性,所以在模型中设置默认参数w,b,和下图一样,并输入同样的x的值,观察输出结果,判断模型的正确性。
#不调用ipython构建深度学习网络的库函数,自建深度学习网络1.0版——————————————————————————————————————————————————————————
import numpy as np
#输入X,w,b的值,然后计算输出后的值Z,返回用sigmoid(Z)转换后的值y(n行矩阵)
def Deep_Neetwork(x1,x2,w,b):
x = np.array([[x1],[x2]])
z = np.dot(w,x) + b
y = 1 /(1+np.e**(-z))
return z,y
#输入初始X值和需要建立Deep learning网络层数n,返回用来存放各层z,y,w,b的值的数组
def Deep_layers(x1_input,x2_input,n):
z_shuzu = ([0]*n) #用在存储各个输出端z的值的数组
y_shuzu = ([0]*(n+1)) #用在存储各个输出端y的值的数组
w = ([0]*n) #用来存储每一层参数w矩阵的数组
b = ([0]*n) #用来存储每一层参数b矩阵的数组
#———为了验证模型正确性所以设置了和李宏毅老师给的模型同样的参数————
w[0] = np.array([[1,-2],[-1,1]]) #给第1层参数w赋予初值
w[1] = np.array([[2,-1],[-2,-1]]) #给第2层参数w赋予初值
w[2] = np.array([[3,-1],[-1,4]])#给第3层参数w赋予初值
b[0] = np.array([[1],[0]]) #给第1层参数b赋予初值
b[1] = np.array([[0],[0]]) #给第2层参数b赋予初值
b[2] = np.array([[-2],[2]])#给第3层参数b赋予初值
#———验证正确后可以删除以上程序,将令下面num = 0,直接批量给定初值———
num = 3
# 给每一次的w,b赋初值
while num < n:
w[num] = np.array([[1,-2],[-1,1]])
b[num] = np.array([[1],[0]])
num += 1
#——————————————-——-———————————————————
#得到第0层的输出值,也就是初始输入值
y_shuzu[0] = np.array([[x1_input],[x2_input]])
i = 1
#建立网络结构,总共建立n层
while i <= n:
z_shuzu[i-1],y_shuzu[i] = Deep_Neetwork( y_shuzu[i-1][0,0], y_shuzu[i-1][1,0], w[i-1], b[i-1])
i += 1
return z_shuzu,y_shuzu,w,b
#——————————————————————————————————————————————————————————————
z,y,w,b = Deep_layers(1,-1,3)
print(y) #输出y和李宏毅教授给定的数据做对比,判断模型是否正确。
运行结果: