您的位置:首页 > 编程语言 > Python开发

深度学习笔记-第3章-《深度学习入门——基于Python的理论与实现》

2018-10-24 23:31 871 查看
版权声明:转载请告知征得同意。 https://blog.csdn.net/qq_42731466/article/details/83351619

这个书各位大佬都很熟悉,我就不多说了。这个系列的文章肯定不是很长,整个整合到
机器学习-笔记目录

深度学习笔记——《深度学习入门——基于Python的理论与实现》

第3章——神经网络

神经网络和感知机,我觉的是一回事,但是表示的方式发生了变化。
神经网络的第一层称为输出层,偏置b是在输入层的,并且权重是1,它直接进入了神经网络,表达方式有所变化了。此后激活条件修改了加权和大于0就会激活它。

注意到中间层,既可以接受多个输入也可以多向输出。
感知机和神经网络的区别就在于激活函数:h(x)=1/(1+exp(-x))
激活函数不止一种,sigmoid、ReLU函数
.
.
.

  • 神经网络的实现

简单来说,对于神经的信息的收集

1.最简单的如下a是最终收集的信息之和,这里是一维,b是偏置,w是权重。

a = x*w +b

2.然后扩展到二维
a接受两个信息,输出层是x1,x2。也就是像最简单的感知机一样

a = w1*x1+w2x2+b

3.继续扩展当第一层输出层x1,x2,但是接受的神经不再是一个,而是a1,a2,a3三个的时候

a1 = w11*x1+w12*x2+b1

a2 = w21*x1+w22*x2+b2

a3 = w31*x1+w32*x2+b3

此时可以对它进行改写

B=(b1,b2,b3)
A=(a1,a2,a3)
X=(x1,x2)
W=(w11,w21,w31
-----w12,w22,w32)

A(1X3) = B(1X3) + X(1X2)*W(2X3)

一般形式:

A=XW+B

于是A成为了下一个X

Xn=Xn-1*Wn-1+Bn-1

  • 分类函数softmax

这个和恒等函数很不同,恒等函数采集了信号之后,输向下一级,而softmax受到不同信号的影响。
(0.3,2.9,4.0)经过某种变换之后得到(0.018,0.245,0.737),三者之和为1,它的间距被调整了。
这个函数是有一些性质的

1.可以认为它是对输出的概率,或者对分布的描述
2.输出之和恒等于1
3.因为是单调的,元素之间的大小关系是不变的

import numpy as np
def softmax(arr):
# 接受ndarray
arMax = np.max(arr)
arr -= arMax    # 溢出策略
arr = np.exp(arr)
arr = arr/np.sum(arr)
return arr

arr = np.array([1010,1000,990])
softmax(arr)

书中对于这三个输出的描述是,索引0,1,2的概率是1.8%、24.5%、73.7%。
我是没明白他这个概率是指的什么,为什么采用这个模型也是一个问题。
所以走到这里都还是一片迷雾。

.

  • 3.6手写数字的识别

终于进入了高潮部分。

1.输出层的神经元数量需要根据待解决的问题来决定。

对于分类问题,输出神经元的数量一般设定为类别的数量。比如预测图中的数字是0-9的哪一个,(10个类别)那么输出层的数量就是10个。

MNIST数据集

这下把图补过来了。CAD绘制的。。我还没找到很好的绘制工具。。将就一下,想要这个图的我把文件提供一下
https://download.csdn.net/download/qq_42731466/10748151

这个图略去了备注部分,带备注的,所有的备注我都隐藏在CAD的图层里面了。

总结

问题汇总
1.sigmoid函数的平滑性对神经网络的学习有重要意义,这句话我是没读懂的。
2.神经网络的激活函数必须使用非线性函数。换句话说,激活函数不能使用线性函数。使用线性函数,加深神经网络的层数就没有意义了。

线性函数的问题在于,不管加深多少层,总是存在与之等效的无隐藏层的神经网络。

3.一般地,回归问题可以用恒等函数,二元分类可以用

sigmoid
,多元可以用
softmax
.

更新日志及进度

2018.10.24——

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐