乐于分享
好东西不私藏

AI基础 | 前向传播

AI基础 | 前向传播

实现前向传播的策略如下:

1.通过将输入值乘以权重来神经元输出值

2.计算激活值

3.在每个神经元上重复前两个步骤,直到输出层

4.将预测输出与真实值进行比较计算损失值

import numpy as npdef feed_forward(inputs, outputs, weights):    pre_hidden = np.dot(inputs, weights[0]) + weights[1]    hidden = 1/(1+np.exp(-pre_hidden))    pred_out = np.dot(hidden, weights[2]) + weights[3]    mean_squared_error = np.mean(np.square(pred_out - outputs))    return mean_squared_error

功能

该函数实现了一个单隐藏层前馈神经网络的前向传播,并计算预测输出与真实输出之间的均方误差(MSE)

参数

  • inputs:形状为 (n_samples, n_features) 的 numpy 数组,表示输入数据。

  • outputs:形状为 (n_samples, n_outputs) 的 numpy 数组,表示真实的目标值。

  • weights:包含四个元素的列表,分别代表网络中的权重和偏置:

    • weights[0]:输入层到隐藏层的权重矩阵,形状 (n_features, n_hidden)

    • weights[1]:隐藏层的偏置向量,形状 (n_hidden,)

    • weights[2]:隐藏层到输出层的权重矩阵,形状 (n_hidden, n_outputs)

    • weights[3]:输出层的偏置向量,形状 (n_outputs,)

网络结构

  • 输入层:维度为 n_features

  • 隐藏层:神经元数量为 n_hidden,激活函数为 Sigmoid1/(1+exp(-x)))。

  • 输出层:维度为 n_outputs无激活函数(即线性输出,适用于回归任务)。

计算步骤

  1. 隐藏层线性部分pre_hidden = np.dot(inputs, weights[0]) + weights[1]计算输入经过权重和偏置后的线性组合。

  2. 隐藏层激活hidden = 1/(1+np.exp(-pre_hidden))应用 Sigmoid 函数,得到隐藏层的输出。

  3. 输出层预测pred_out = np.dot(hidden, weights[2]) + weights[3]计算隐藏层到输出层的线性组合,得到最终预测值。

  4. 损失计算mean_squared_error = np.mean(np.square(pred_out - outputs))计算预测值与真实值的均方误差(MSE),返回标量。

函数调用示例

假设我们要解决一个简单的回归问题:输入维度为 3,隐藏层有 4 个神经元,输出维度为 2。我们将随机生成输入、真实输出和权重,然后调用函数计算 MSE。

import numpy as np# 定义数据规模n_samples = 5n_features = 3n_hidden = 4n_outputs = 2# 随机生成输入和真实输出inputs = np.random.randn(n_samples, n_features)outputs = np.random.randn(n_samples, n_outputs)# 随机初始化权重和偏置(注意列表顺序)weights = [    np.random.randn(n_features, n_hidden),   # 输入->隐藏权重    np.random.randn(n_hidden),               # 隐藏层偏置    np.random.randn(n_hidden, n_outputs),    # 隐藏->输出权重    np.random.randn(n_outputs)               # 输出层偏置]# 调用前向传播函数计算 MSEmse = feed_forward(inputs, outputs, weights)print("均方误差 (MSE):", mse)

输出示例

均方误差 (MSE): 2.3456...

参考:

https://blog.csdn.net/LOVEmy134611/article/details/130909080