

实现前向传播的策略如下:
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,激活函数为 Sigmoid(1/(1+exp(-x)))。输出层:维度为
n_outputs,无激活函数(即线性输出,适用于回归任务)。
计算步骤
隐藏层线性部分:
pre_hidden = np.dot(inputs, weights[0]) + weights[1]计算输入经过权重和偏置后的线性组合。隐藏层激活:
hidden = 1/(1+np.exp(-pre_hidden))应用 Sigmoid 函数,得到隐藏层的输出。输出层预测:
pred_out = np.dot(hidden, weights[2]) + weights[3]计算隐藏层到输出层的线性组合,得到最终预测值。损失计算:
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
夜雨聆风