【机器学习】输出层的设计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011240016/article/details/85125030

神经网络可以用于分类和回归问题,但是最后在输出时需要根据情况来设定输出层的激活函数。一般来说,

  • 回归问题:恒等函数
  • 分类问题:softmax函数

https://blog.csdn.net/u011240016/article/details/85121601

恒等函数与softmax函数

恒等函数:输入 = 输出

softmax函数

y k = e x p ( a k ) i = 1 n e x p ( a i ) y_k = \frac{exp(a_k)} {\sum_{i=1}^nexp(a_i)}

其中 a k a_k 是输入信号,即前层神经元的输出, y k y_k 是第k个神经元的输出,n是输出层神经元的个数。

# softmax
def softmax(x):
  return np.exp(x) / np.exp(x).sum()

a = np.array([0.3, 2.9, 4.0])
softmax(a)

softmax处理溢出问题

在这里插入图片描述

在分子分母上同时减去某个常数,为了防止溢出,我们可以将 C C' 设置为输入信号的最大值。

# 防止溢出
def softmax(x):
  c = np.max(x)
  exp_x = np.exp(x - c)
  sum_exp_x = np.sum(exp_x)
  return exp_x / sum_exp_x
  
a = np.array([1010, 1000, 990])

softmax(a) # array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])

Softmax函数的输出在0.0~1.0之间,且输出值的总和为1,所以可以将softmax函数的输出解释为概率

输出层的神经元数量

需要根据具体问题来定,比如手写数字识别,输出层就设置为10个神经元即可。

END.

完全参考:

《深度学习入门:基于Python的理论和实现》

猜你喜欢

转载自blog.csdn.net/u011240016/article/details/85125030