激活函数:softmax分类
- 对数几率回归解决的是二分类的问题,对于多个选项的问题,我们可以使用softmax函数,它是对数几率回归在 N 个可能不同的值上的推广。
Softmax层的作用
- 神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权和与非线性处理之后的一个值而已,那么如何将这个输出变为概率分布?
这就是Softmax层的作用。
softmax要求每个样本必须属于某个类别,且所有可能的样本均被覆盖,softmax各样本分量之和为 1;当只有两个类别时,与对数几率回归完全相同。
在模型优化时
- 对于多分类问题我们使用以下两种损失函数(在model.compile 方法中改写参数 loss)
当标签类别使用独热编码时,使用loss = 'categorical_crossentropy'
当标签类别使用顺序编码时,使用loss = 'sparse_categorical_crossentropy'
来计算softmax交叉熵
独热编码 和 顺序编码
两者关系:假如有n类
- 顺序编码:属于第i类,表示为
i-1
(type=int); - 独热编码:属于第i类,表示为 [0, 0, …, 1, 0, …, 0](type=list, len=n),只有
index=i-1
的位置为1,其余n-1
个位置均为0。
使得标签由原来的顺序编码变为独热编码,在训练新的模型
train_label_onehot = tf.keras.utils.to_categorical(train_label)
test_label_onehot = tf.keras.utils.to_categorical(test_label)
print('独热编码的train_label(前5个):\n')
print(train_label_onehot[:5])
>>>独热编码的train_label(前5个):
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[