Python训练基本感知机神经网络:分步指南
Python训练基本感知机神经网络
本指南演练全注释Python实现,自动学习单层感知机权重。代码可直接复制粘贴运行,并适配自有数据。
探索AAC感知机系列
为深入语境或跳转进阶主题,查看其余文章:
- 如何用神经网络分类:什么是感知机?
- 如何用简单感知机神经网络示例分类数据
- 如何训练基本感知机神经网络
- 理解简单神经网络训练
- 神经网络训练理论导论
- 理解神经网络学习率
- 多层感知机进阶机器学习
- Sigmoid激活函数:多层感知机激活
- 如何训练多层感知机神经网络
- 理解多层感知机训练公式与反向传播
- Python实现的神经网络架构
- 如何用Python创建多层感知机神经网络
- 神经网络信号处理:神经网络设计验证
- 神经网络训练数据集:如何训练验证Python神经网络
单层感知机分类
从经典3D空间二分类问题开始。网络架构:单隐藏层、三输入节点、单输出节点用单位阶跃激活函数。

输出节点应用以下单位阶跃函数:
\[f(x)=\begin{cases}0 & x < 0\\1 & x \ge 0\end{cases}\]
为演示学习,扩展架构自动通过简单训练循环调整权重:

Python实现
以下脚本从Excel读取训练数据,随机初始化权重,用感知机学习规则迭代更新:
import pandas
import numpy as np
# 输入空间维度(x, y, z)
input_dim = 3
# 学习率控制权重调整幅度
learning_rate = 0.01
# 随机初始权重;可设固定值以复现
Weights = np.random.rand(input_dim)
# Weights = np.array([0.5, 0.5, 0.5])
# 加载数据集:含各特征列和'output'列的工作表
Training_Data = pandas.read_excel("3D_data.xlsx")
# 从特征矩阵分离期望输出
Expected_Output = Training_Data.output
Training_Data = Training_Data.drop(["output"], axis=1)
# 转NumPy数组向量化运算
Training_Data = np.asarray(Training_Data)
training_count = len(Training_Data[:, 0])
# 多epoch训练
for epoch in range(5):
for datum in range(training_count):
# 输入加权和
Output_Sum = np.sum(np.multiply(Training_Data[datum, :], Weights))
# 应用单位阶跃激活
Output_Value = 0 if Output_Sum < 0 else 1
# 计算期望与实际输出误差
error = Expected_Output[datum] - Output_Value
# 按学习规则更新各权重
for n in range(input_dim):
Weights[n] += learning_rate * error * Training_Data[datum, n]
print(f"w_0 = {Weights[0]:.3f}")
print(f"w_1 = {Weights[1]:.3f}")
print(f"w_2 = {Weights[2]:.3f}")
关键概念解析
配置网络与组织数据
网络三输入节点匹配3D坐标。学习率0.01为标准起点;实验后可调。权重随机种子避免对称,也可设固定值得确定性行为。
训练数据从Excel读取,拆分为输入和期望输出,再转NumPy数组高效计算。
计算输出值
每epoch遍历所有训练样本。对每样本计算输入加权和。单位阶跃函数将此和映射为二元输出:和为负输出0,否则1。
更新权重
预测输出偏离期望输出时,感知机学习规则按输入值、误差、学习率比例调整各权重:
\[w_{new} = w + (\alpha \times \delta \times input)\]
其中\(\delta = \text{output}_{expected} - \text{output}_{calculated}\),\(\alpha\)为学习率。
结论
你已见完整、带注解的单层感知机Python实现。代码为实验不同数据集、学习率、乃至未来扩展多输出的坚实基础。
嵌入式