前馈神经网络(Feedforward Neural Network),之前介绍的单层感知机、多层感知机等都属于前馈神经网络,它之所以称为前馈(Feedforward),或许与其信息往前流有关:数据从输入开始,流过中间计算过程,最后达到输出层。
下面来看输出层如何设计
机器学习的问题大致可以分为分类问题和回归问题。
分类问题是数据属于哪一个类别的问题。例如区分图像中的人是男性还是女性
回归问题是根据某个输入预测一个(连续的)数值的问题,例如根据一个人的图像预测这个人的体重
分类和回归属于监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。
与监督学习相对应的是非监督学习,此时数据没有类别信息,也不会给定目标值。在非监督学习中,将数据集合分成由类似的对象组成的多个类的过程被称为聚类:将寻找描述数据统计值的过程称之为密度估计。此外,非监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。
恒等函数和sigmoid函数和softmax函数
恒等函数主要用于对回归问题的激活,这种问题中往往需要最大程度的保护最后的输出结果,因为回归问题往往最后计算的结果是一个具体的权重,也是最终答案,那当然是原封不动的输出是最好的。所以恒等函数简单点来说那就是什么都不做
恒等函数会将输人按原样输出
sigmoid函数由于其限制在[0,1]中,所以很适合二元分类。
softmax函数充分考虑每一个输出结点的权重影响,从而使概率的描述更加准确,适合多元分类。
softmax函数可以用下面的式子表示
softmax函数的分子是输人信号的指数函数,分母是所有输人信号的指函数的和。(softmax所有值加起来是1)
使用python来实现softmax
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
softmax 的缺陷就是溢出问题,因为使用指数计算,值会变得非常大,改进的代码如下:
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) #溢出对策
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
通过减少输入信号中的最大值来解决溢出的问题
softmax函数的特征
softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。正是因为softmax函数的输出值的总和都是1,所以可以用概率(统计的)方法处理问题
关于理解机器学习的问题
机器学习的步骤可以分为“学习”和“推理”两个阶段
首先在学习阶段进行模型的学习,然后,在推理阶段,用学到的模型对未知的数据进行推理(分类)。
softmax函数用在学习不用在推理阶段
将softmax函数引入输出层
如下面例子:文章来源:https://www.toymoban.com/news/detail-498808.html
def forward_net(network,x):
W1 = network['W1']
b1 = network['b1']
W2 = network['W2']
b2 = network['b2']
W3 = network['W3']
b3 = network['b3']
x = np.dot(x,W1)+b1
x = ReLU(x)
x = np.dot(x,W2)+b2
x = ReLU(x)
x = np.dot(x, W3) + b3
x = softmax(x)
return x
运行结果为:文章来源地址https://www.toymoban.com/news/detail-498808.html
[0.00196166 0.99803834]
到了这里,关于【深度学习】2-3 神经网络-输出层设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!