这个书各位大佬都很熟悉,我就不多说了。这个系列的文章肯定不是很长,整个整合到
机器学习-笔记目录
深度学习笔记——《深度学习入门——基于Python的理论与实现》
第4章——神经网络的学习
e.g:机器学习中的特征是人为设定,而深度学习则不是。
红色为人参与,灰色无人参与
这个章节比较重点的地方,这里跟机器学习很类似的一个地方就是如何去衡量一个学习程度。
神经网络以某个指标去寻找最优权重参数,这就是损失函数,损失函数可以用任意函数,一般情况下用均方误差或者交叉熵
代码图1
跳过4.3的数值微分部分,直接说4.4的代码。
这节直接给了一个simplenet的例子,从例子来学习。这段会一步一步说。借助这个例子来谈4.3
实在找不到什么好工具来画这个图了,只能用CAD了,,原谅我。。。。
https://download.csdn.net/download/qq_42731466/10747534
上面的链接是图,需要补充或者扩展的自行下载。
因为这个代码不是一个文件,在多个文件里面跳转,这样清晰多了。。
主结构里面代码实际上只有三句,一句赋值分别是x
和t
的接受初始信息和正确解的标签,第二句是类的调用第三句是计算梯度并返回。
.
1.代码在M
块开始(Main
),M
触发了内部的一个类C1
(class1
缩写),net
被simpleNet
实例化成为对象,并获得了.W
属性。
2.labmda
匿名函数这里只是申明。(注意:此时并没有调用net
里面的方法)
3.numerical_gradient
作为外部函数被调用,3.1-进入外部模块
F1
,计算数值梯度,注意np.nditer
是个迭代器返回索引,执行次数就是矩阵的大小。它的进行就是分别对初始化.W
的权重进行梯度计算。3.1.1——计算至
fxh1
的时候触发f
的lambda
匿名函数,此时又触发C1
,实例化的net
中loss
方法被调用3.1.1.1——计算至
.predict
调用自身的方法,x
和W
进行矩阵乘法得到1X3的矩阵,赋值给z
,此时得到的是接收的信息x和权重W的内积,意味3个神经元分别接收的信息总和。
3.1.1.2—— 触发外部函数F21
的softmax
,对z采集的三组信息进行概率分配。注意:
这里有一个技巧性处理
3.1.1.3—— 触发外部函数F22
的cross_entropy_error
,如果接收的y
矩阵维度是1则会触发reshape
进行调整,调整为(1*t.size),成为一个2维矩阵,注意矩阵大小为2和维度大小为1X2是不同的维度。argmax()
方法按行返回最大值对应的索引。最后计算并返回交叉熵给C1
3.1.2——计算至
fxh2
再次触发f
和3.1.1
相同
3.1.3——grad[idx]
计算的就是数值梯度,这里是一维,很方便。it.iternext()
对索引进行一次递增,否则一种计算第一个索引对应值的梯度。3.2——最后返回梯度值
4.显示结果
.
所以归根结底,这套代码就是计算梯度的。
总体而言,前面1,2步都是在做预处理,真正执行入口在
F1
,然后根据softmax
返回概率矩阵,根据概率计算损失函数cross_entropy_error
的梯度。返回梯度。
代码图2
问题
深度学习和机器学习的关系是什么?
补充:
P82-Q18,感知机收敛定理?如何理解“通过有限次数的学习,线性可分问题是可解的”?
P82-Q18,深度学习和机器学习的本质区别?
P83-Q19,在计算机视觉领域所说的特征量指的是什么?SIFT、SURF、HOG指的是什么?
P83-Q20,转化成向量使用SVM、KNN分类器是什么意思,分类器本身是什么意思?
P84-Q21,什么是过拟合?
P95-Q24,中心差分是如何减小误差的?
更新
2018.10.27. ——更新至109/119,还缺少一个代码图以及分析。