【机器学习-16】-NumPy数组、张量tensor、神经网络计算公式

以下内容的整合解释,涵盖NumPy数组、激活向量、神经网络模型和前向传播的核心概念和公式:


1. NumPy数组的维度与创建

内容:展示不同维度的NumPy数组及其代码实现。
2D数组
python x = np.array([[1, 2, 3], [4, 5, 6]]) # 2x3矩阵(2行3列)
1D数组
python x = np.array([0.1, 0.2, -3.0, -4.0, -0.5, -0.6, 7.0, 8.0]) # 可重塑为4x2矩阵
关键点
• 数组形状(如2x3)决定其维度,np.array是创建数组的基础方法。
• 手写图示直观对比了矩阵结构和代码的对应关系。


2. 激活向量的生成

内容:演示神经网络中激活向量的计算过程。
代码示例
python x = np.array([[200.0, 17.0]]) # 输入向量 layer_1 = Dense(units=3, activation='sigmoid') # 3个神经元的密集层 a1 = layer_1(x) # 输出激活向量:[0.2, 0.7, 0.3]
输出:1x3矩阵,通过sigmoid函数将值压缩到0-1之间。
关键点
• 激活函数(如sigmoid)引入非线性,输出向量表示神经元的激活状态。


3. 数字分类神经网络

内容:展示一个Sequential模型的结构和训练流程。
模型结构
python model = Sequential([ Dense(units=25, activation='sigmoid'), # 输入层→隐藏层1(25单元) Dense(units=15, activation='sigmoid'), # 隐藏层2(15单元) Dense(units=1, activation='sigmoid') # 输出层(二分类) ])
训练与预测
python model.fit(x, y) # 训练数据(x为特征,y为标签) model.predict(x_new) # 对新数据预测
关键点
• 逐层传递数据,每层通过激活函数转换特征。
• 适用于图像分类等任务(如手写数字识别)。


4. 咖啡烘焙模型的前向传播

内容:详细拆解单层神经网络的前向计算步骤。
输入与参数
python x = np.array([200, 17]) # 输入特征(如温度、时间) w1 = np.array([1, 2]), w2 = np.array([-3, 4]), w3 = np.array([5, -6]) # 权重 b1, b2, b3 = -1, 1, 2 # 偏置
计算过程
1. 计算加权和:z1_1 = np.dot(w1, x) + b1
2. 激活输出:a1_1 = sigmoid(z1_1)
3. 合并激活值:a1 = np.array([a1_1, a1_2, a1_3])
关键点
◦ 展示如何从输入到输出逐步计算,体现神经网络的“前向”传递。
◦ 适用于回归或分类问题(如咖啡烘焙质量预测)。


总结

四张图片共同覆盖了机器学习的核心流程:

  1. 数据准备(NumPy数组操作)→
  2. 单神经元计算(激活向量)→
  3. 完整模型构建(Sequential网络)→
  4. 底层数学实现(前向传播)。

如需进一步探讨某一部分,可提供具体问题!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

根据图片的核心内容,以下是关于NumPy实现神经网络前向传播的详细解析,包括代码功能、数学原理和实现步骤:


1. 核心概念:前向传播的数学原理

输入与参数
• 输入向量 a_in(或 x)通过权重矩阵 W 和偏置 b 进行线性变换:
z=W⋅a_in+bz = W \cdot a\_in + bz=Wa_in+b
• 激活函数 g(z)(如 sigmoidReLU)引入非线性,输出激活值 a_out

多层级联
每一层的输出作为下一层的输入,形成链式计算(如 x → a1 → a2 → ... → f_x)。


2. 代码解析与实现

(1) 单层计算:dense 函数
def dense(a_in, W, b):
    units = W.shape[1]          # 获取当前层的神经元数量(权重矩阵列数)
    a_out = np.zeros(units)     # 初始化输出向量
    for j in range(units):
        w = W[:, j]             # 提取第j个神经元的权重向量
        z = np.dot(w, a_in) + b[j]  # 计算加权和 + 偏置
        a_out[j] = g(z)         # 应用激活函数
    return a_out

关键点
• 权重矩阵 W 的每一列对应一个神经元的权重。
• 循环计算每个神经元的输出,支持任意激活函数 g()(需提前定义)。
示例参数
python W = np.array([[1, -3, 5], [2, 4, -6]]) # 2x3矩阵(输入维度2,输出维度3) b = np.array([-1, 1, 2]) # 偏置向量 a_in = np.array([200, 17]) # 输入向量

(2) 多层串联:sequential 函数
def sequential(x):
    a1 = dense(x, W1, b1)       # 第一层计算
    a2 = dense(a1, W2, b2)      # 第二层计算
    a3 = dense(a2, W3, b3)      # 第三层计算
    f_x = dense(a3, W4, b4)     # 输出层计算
    return f_x

关键点
• 通过多次调用 dense 实现多层前向传播。
• 需提前定义每层的参数 W1, b1, W2, b2, ...


3. 示例计算流程(结合图中参数)

假设输入 x = [200, 17],参数如下:
第一层(W1, b1)

W1 = np.array([[1, -3, 5], [2, 4, -6]])  # 2x3矩阵
b1 = np.array([-1, 1, 2])                # 偏置

• 计算步骤:
1. 第一个神经元:z1 = 1*200 + 2*17 + (-1) = 233a1_1 = g(233)
2. 第二个神经元:z2 = -3*200 + 4*17 + 1 = -531a1_2 = g(-531)
3. 第三个神经元:z3 = 5*200 + (-6)*17 + 2 = 900a1_3 = g(900)
• 输出 a1 = [g(233), g(-531), g(900)](具体值取决于 g 函数)。


4. 关键注意事项

  1. 权重矩阵形状
    • 第 (i) 层的 W 形状为 (输入维度, 输出维度)。例如,从2维输入到3维输出需 2x3 矩阵。
  2. 激活函数 g()
    • 需提前定义(如 sigmoidReLU),未在图中显示具体实现。
  3. 向量化优化
    • 实际应用中应避免循环,直接用矩阵运算(如 Z = np.dot(a_in, W.T) + b)。

5. 总结与扩展

图片核心:展示了前向传播的底层实现逻辑,适合理解神经网络的基础数学原理。
扩展建议
• 使用 NumPy 的广播机制优化 dense 函数。
• 结合反向传播实现完整训练流程(如梯度下降)。

如需进一步解释某部分代码或数学细节,请具体说明!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐