目的
使用神经网络探索多类分类的一个示例。
导入需要的工具和库
神经网络多分类简述
神经网络通常用于对数据进行分类。例如,神经网络可以处置惩罚照片并将其分类为狗、猫、马或其他类别,也可以处置惩罚句子并将其元素分类为名词、动词、形容词等。神经网络的最后一层包罗多个神经元,每个神经元的输出对应一个类别。当一个输入样本传入神经网络时,输出值最高的神经元表现预测的类别。如果输出经过softmax函数处置惩罚,它将提供输入属于每个类别的概率。
在这个实验中,您将看到在Tensorflow中构建一个多类别网络的例子。接着,我们将深入了解神经网络是如何做出其预测的。让我们从创建一个四类数据集开始。
准备并可视化数据
1.构建数据集
使用 Scikit-Learn 的 make_blobs 函数来创建一个包罗 4 个类别的训练数据集。
- X_train: 一个形状为 (100, 2) 的数组,包罗生成的特征数据,每行表现一个数据点,每列表现一个特征。
- y_train: 一个形状为 (100,) 的数组,包罗生成的数据点的类别标签,每个元素表现对应数据点的类别(0, 1, 2, 或 3)。
2.可视化数据集
可视化数据集。每个点代表一个训练示例。坐标轴 (x0, x1) 是输入,颜色表现示例所属的类别。一旦训练完成,模型将接收一个新的示例 (x0, x1),并预测其类别。
尽管这个数据集是生成的,但它代表了很多现实天下中的分类问题。有几个输入特征 (x0, … , xn) 和几个输出类别。模型通过使用输入特征来预测正确的输出类别进行训练。
输出具体的类别,前10个数据集的真实标签y,以及训练样本的形状。
构建神经网络
1.简述
本实验将使用如下所示的两层神经网络。与二元分类网络不同,该网络有四个输出,每个类别一个。给定一个输入样本,输出值最高的便是预测的输入类别。
2.构建模型
设置两层,输出层为线性激活。固然可以在输出层包罗softmax函数,但在训练过程中将线性输出传递给损失函数会更为数值稳固。如果模型用于预测概率,那么在该阶段可以应用softmax函数。
3.编译并训练模型
以下语句用于编译并训练神经网络。在损失函数中设置参数from_logits=True,是为了指定输出激活函数为线性,而非softmax。
模型训练完成后,我们可以看到模型如何对训练数据进行分类。
4.每一层的分类
如上所示,决策边界显现了模型如何对输入空间进行分别。这个非常简朴的模型在对训练数据进行分类时没有遇到任何困难。它是如何实现这一点的呢?让我们更具体地了解一下这个网络。
接下来,我们将从模型中提取训练好的权重,并利用这些权重来绘制网络中每个单元的功能。在下方会有对效果的更具体阐明。要成功使用神经网络,您不需要了解这些细节,但了解这些内容大概会有助于您更深入地理解各层是如何团结来解决分类问题的,从而增长您的直觉理解。
第一层
第二层
5.表明每一层的分类
第一层
阴影越深,表现模型预测的激活值越高,也就是说模型预测该区域内的数据点属于某一类别的概率越高。
- 左图中,橙色点和紫色点(类别 2 和 3)位于右侧阴影深的区域,表现这些区域里的样本x0x1激活值较高,模型预测这些样本属于类别 2 和 3 的概率较高。蓝色点和绿色点(类别 0 和 1)位于左侧阴影浅的区域,激活值为 0。
- 右图中,紫色点和绿色点(类别 3 和 1)位于下侧阴影深的区域,表现这些区域里的样本x0和x1和激活值较高,模型预测这些样本属于类别3和1的概率较高。橙色点和蓝色点(类别 2 和 0)位于上侧阴影浅的区域,激活值为 0。
总结一下:第一层的两个神经元,通过不同的参数,绘制出不同的决策边界,然后通过ReLU,预测出了不同的分类。
第二层
这些图中的点是由第一层转换的训练样本。可以认为第一层为第二层创建了一组新的特征进行评估。这些图中的坐标轴是前一层的输出 |