吴恩达2022机器学习专项课程C2W2:实验多类分类

这里写目录标题

目标

使用神经网络探索多类分类的一个示例。

导入需要的工具和库

神经网络多分类简述

神经网络通常用于对数据进行分类。例如,神经网络可以处理照片并将其分类为狗、猫、马或其他类别,也可以处理句子并将其元素分类为名词、动词、形容词等。神经网络的最后一层包含多个神经元,每个神经元的输出对应一个类别。当一个输入样本传入神经网络时,输出值最高的神经元表示预测的类别。如果输出经过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,预测出了不同的分类。

第二层

这些图中的点是由第一层转换的训练样本。可以认为第一层为第二层创建了一组新的特征进行评估。这些图中的坐标轴是前一层的输出 𝑎[1]0 和 𝑎[1]1 。如上所述,类别0和1(蓝色和绿色)具有 𝑎[1]0=0 ,而类别0和2(蓝色和橙色)具有 𝑎[1]1=0。

再次强调,背景颜色的强度表示最高值。 单元0在 (0,0) 附近产生最大值,该位置映射了类别0(蓝色)。 单元1在左上角产生最高值,选择类别1(绿色)。 单元2在右下角产生最高值,选择类别2(橙色)。 单元3在右上角产生最高值,选择最后一个类别(紫色)。

图中不明显的另一个方面是值在单元之间的协调。一个单元不仅需要为其选择的类别生成最大值,还必须在该类别的点上是所有单元中的最高值。这是通过作为损失函数一部分的隐含 softmax 函数(SparseCategoricalCrossEntropy)来完成的。与其他激活函数不同,softmax 跨所有输出工作。

即使不清楚每个单元的具体作用,您也可以成功使用神经网络。希望这个示例能为您提供一些关于内部机制的直观理解。

存在的问题

即便设置了固定种子,每次Run All,神经网络的W,B也会随机变化,不清楚为什么。

相关推荐
一枕眠秋雨>o<5 分钟前
从抽象到具象:TBE如何重构AI算子的编译哲学
人工智能
xiaobaibai1536 分钟前
决策引擎深度拆解:AdAgent 用 CoT+RL 实现营销自主化决策
大数据·人工智能
island13147 分钟前
CANN ops-nn 算子库深度解析:神经网络核心计算的硬件映射、Tiling 策略与算子融合机制
人工智能·深度学习·神经网络
冬奇Lab8 分钟前
一天一个开源项目(第14篇):CC Workflow Studio - 可视化AI工作流编辑器,让AI自动化更简单
人工智能·开源·编辑器
是小蟹呀^10 分钟前
从稀疏到自适应:人脸识别中稀疏表示的核心演进
人工智能·分类
云边有个稻草人10 分钟前
CANN ops-nn:筑牢AIGC的神经网络算子算力底座
人工智能·神经网络·aigc·cann
island131410 分钟前
CANN Catlass 算子模板库深度解析:高性能 GEMM 架构、模板元编程与融合算子的显存管理策略
人工智能·神经网络·架构·智能路由器
结局无敌11 分钟前
从算子到生态:cann/ops-nn 如何编织一张高性能AI的协作之网
人工智能
chaser&upper12 分钟前
击穿长文本极限:在 AtomGit 破译 CANN ops-nn 的注意力加速密码
人工智能·深度学习·神经网络
玄同76515 分钟前
Python 后端三剑客:FastAPI/Flask/Django 对比与 LLM 开发选型指南
人工智能·python·机器学习·自然语言处理·django·flask·fastapi