Logo
Section 1 / 8

字母分类数据集简介

本课程重点介绍字母分类数据集的探索与预处理。

检查点

字母分类数据集简介

本课程重点介绍字母分类数据集的探索与预处理。

字母分类数据集

该数据集包含用于生成字母 A、B 和 C 的像素值及其标签。这是一个多类分类问题,因为我们需要根据像素配置预测字母 A、B 或 C 的概率。

📝 注意:多类分类问题要求标签采用 one-hot 编码。

📝 One-hot 编码用于量化类别型数据,即具有多个类别的数据。它生成一个长度等于数据集中类别数量的向量。如果某个数据点属于第 ii 个类别,则该向量中除第 ii 个索引外其余位置均为 0,第 ii 个索引为 1。这有助于以数值方式有效表示类别。

数据集探索

探索数据集。

1import numpy as np 2import matplotlib.pyplot as plt 3 4# 创建数据集 5# A 6a = [0, 0, 1, 1, 0, 0, 7 0, 1, 0, 0, 1, 0, 8 1, 1, 1, 1, 1, 1, 9 1, 0, 0, 0, 0, 1, 10 1, 0, 0, 0, 0, 1] 11 12# B 13b =[0, 1, 1, 1, 1, 0, 14 0, 1, 0, 0, 1, 0, 15 0, 1, 1, 1, 1, 0, 16 0, 1, 0, 0, 1, 0, 17 0, 1, 1, 1, 1, 0] 18# C 19c =[0, 1, 1, 1, 1, 0, 20 0, 1, 0, 0, 0, 0, 21 0, 1, 0, 0, 0, 0, 22 0, 1, 0, 0, 0, 0, 23 0, 1, 1, 1, 1, 0] 24 25# 创建标签 26y =[[1, 0, 0], 27 [0, 1, 0], 28 [0, 0, 1]] 29 30 31# 可视化数据,绘制 A 32plt.imshow(np.array(a).reshape(5, 6)) 33plt.show() 34plt.savefig('output/legend1.png') 35 36# 可视化数据,绘制 B 37plt.imshow(np.array(b).reshape(5, 6)) 38plt.show() 39plt.savefig('output/legend2.png') 40 41# 可视化数据,绘制 C 42plt.imshow(np.array(c).reshape(5, 6)) 43plt.show() 44plt.savefig('output/legend3.png')

📝 注意:标签 y 已进行 one-hot 编码。

数据集准备

将数据转换为 NumPy 数组,以便于 NumPy 计算。

1# 将数据转换为 NumPy 数组 2x = np.array([a, b, c]) 3# 标签也转换为 NumPy 数组 4y = np.array(y) 5 6# 打印变量以辅助可视化 7print("x:\n", x) 8print("\ny:\n", y)

训练一个三层神经网络,其中第一层隐藏层有 5 个神经元,第二层隐藏层有 4 个神经元,输出层有 3 个神经元。

...
深度神经网络

参数初始化

以下参数在下面代码中被初始化:

变量定义
X输入特征数组,大小为 3 × 30,代表每个字母
Y一热编码的输出标签,大小为 3 × 3
nx输入层中的神经元数量
n_h1第一层隐藏层中的神经元数量
n_h2第二层隐藏层中的神经元数量
n_y输出层中的神经元数量
w1第一层隐藏层的权重,使用随机数初始化,大小为 nx × nh1,即 30 × 5
w2第二层隐藏层的权重,使用随机数初始化,大小为 nh1 × nh2,即 5 × 4
w3第三层隐藏层的权重,使用随机数初始化,大小为 nh2 × ny,即 4 × 3
b1第一层隐藏层的偏置,使用随机数初始化,大小为 1 × n_h1,即 1 × 5
b2第二层隐藏层的偏置,使用随机数初始化,大小为 1 × n_h2,即 1 × 4
b3第三层隐藏层的偏置,使用随机数初始化,大小为 1 × n_y,即 1 × 3
learning_rate学习率初始化为 0.01
epochs训练轮数初始化为 10000
1import numpy as np 2import matplotlib.pyplot as plt 3# 创建数据集 4# A 5a = [0, 0, 1, 1, 0, 0, 6 0, 1, 0, 0, 1, 0, 7 1, 1, 1, 1, 1, 1, 8 1, 0, 0, 0, 0, 1, 9 1, 0, 0, 0, 0, 1] 10 11# B 12b =[0, 1, 1, 1, 1, 0, 13 0, 1, 0, 0, 1, 0, 14 0, 1, 1, 1, 1, 0, 15 0, 1, 0, 0, 1, 0, 16 0, 1, 1, 1, 1, 0] 17# C 18c =[0, 1, 1, 1, 1, 0, 19 0, 1, 0, 0, 0, 0, 20 0, 1, 0, 0, 0, 0, 21 0, 1, 0, 0, 0, 0, 22 0, 1, 1, 1, 1, 0] 23 24# 创建标签 25y =[[1, 0, 0], 26 [0, 1, 0], 27 [0, 0, 1]] 28 29 30# 可视化数据,绘制 A。 31plt.imshow(np.array(a).reshape(5, 6)) 32plt.show() 33 34 35# 将数据和标签转换为 NumPy 数组 36x = np.array([a, b, c]) 37# 标签也转换为 NumPy 数组 38y = np.array(y) 39 40np.random.seed(42) # 设置种子以生成相同的随机值 41n_x = 30 42n_h1 = 5 43n_h2 = 4 44n_y = 3 45w1 = np.random.randn(n_x, n_h1) 46w2 = np.random.randn(n_h1, n_h2) 47w3 = np.random.randn(n_h2, n_y) 48b1 = np.zeros((1, n_h1)) 49b2 = np.zeros((1, n_h2)) 50b3 = np.zeros((1, n_y)) 51learning_rate = 0.01 52epochs = 10000 53 54print("\n特征:\n", x) 55print("\n标签:\n", y) 56print("\n输入层节点数:", n_x) 57print("\n第一层隐藏层节点数:", n_h1) 58print("\n第二层隐藏层节点数:", n_h2) 59print("\n第一层隐藏层权重形状:", w1.shape) 60print("\n第二层隐藏层权重形状:", w2.shape) 61print("\n第一层隐藏层偏置形状:", b1.shape) 62print("\n第二层隐藏层偏置形状:", b2.shape) 63print("\n学习率:", learning_rate) 64print("\n训练轮数:", epochs)

📝 到目前为止,我们了解到,在多类分类问题中,必须在输出层使用 softmax 激活函数。

🍀 在开始训练模型之前,请编写 softmax 激活函数!

📝 在下面的代码中,x 是作为输入传入的数组。 你的任务是应用 softmax 激活函数并返回输出。

示例输入:

x = [3.0, 1.0, 0.2]

示例输出:

[0.8360188 0.11314284 0.05083836]

加油!🤞

1import numpy as np 2 3def softmax(x): 4 """为 x 中每组分数计算 softmax 值。""" 5 # 你的代码写在这里! 6 pass

Quiz

单选题

对于上述网络的隐藏层,应选择什么激活函数?

1 / 2

🖥️ 项目:构建一个数字识别模型

🍀 挑战:前向传播 - 三层神经网络