# 输出层的设计
# 神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数
# 恒等函数和softmax函数
# 恒等函数会将输入原样输出,不加任何改动直接输出
# softmax函数
import numpy as np
# 在计算机运行时必须考虑溢出问题,softmax的实现要进行指数函数的运算,但是此时的数非常大,超出4和8个字节的限制,也就是需要处理有效数的限制
def softmax(i):
j = np.max(i) # 溢出策略
exa = np.exp(i - j)
suma = np.sum(exa)
sy = exa / suma
return sy
a = np.array([0.3, 2.9, 4.0])
print(a)
exp_a = np.exp(a) # 指定函数
print(exp_a)
sum_exp_a = np.sum(exp_a)
print(sum_exp_a)
y = exp_a / sum_exp_a
print(y)
print(softmax(a))
# @TODO softmax 溢出运算实例
b = np.array([1010, 1000, 990]) #
# print(np.exp(b) / np.sum(np.exp(b)))
# c = np.max(b) # max num
# print(c)
# print(b - c)
# print(np.exp(b - c) / np.sum(np.exp(b - c)))
# @todo 使用溢出对付策略进行溢出运算
print(softmax(b))
# softmax 的函数特征
# softmax 函数的输出是 0。0 到 1.0 之间的 实数。输出综合是1,输出总和是1是重要的特质 正是因为有了这个性质,才把函数的输出解释为概率‘
# [0.01821127 0.24519181 0.73659691] 通过softmax的函数结果我们可以通过概率的方法做事,比如 第一个类别是0.1%
# 一般而言,神经网络只是把输出值最大的神经元所对应的类别作为识别结果
# 使用softmax 函数,输出值最大的神经元的位置也不会变
c = np.array([0.3, 2.9, 4.0])
x = softmax(c)
print(x)
x_sum = np.sum(x)
print(x_sum)
# 求解机器学习的问题的步骤可以分为 学习和推理两个阶段,首先,在学习阶段进行模型的学习,然后在推理阶段,用学到的模型对未知的数据进行推理(分类)
# 输出层的神经元数量
# 输出层的神经元数量需要根据代解决的问题来决定,对于分类问题,输出层的神经元数量一般设定为类别的数量