当前位置: 首页 > news >正文

加深理解神经元的工作原理:感知机预测的实现

怎么去理解一个神经元的工作原理? 加权求和,激活函数. 这些概念反反复复的就是记不住,怎么理解监督学习,权重更新规则,这些理论模模糊糊总是理解不到. 下面用一个简单的例子.加深上面这些内容的理解

使用Python和NumPy(不使用深度学习框架),实现一个感知机,用于对一个简单的逻辑门(AND;OR)进行分类

数据集:

AND逻辑门的数据:

输入:[0, 0], 标签 0

输入:[0, 1], 标签 0

输入:[1, 0],标签 0

输入:[1, 1],标签 1

要求:

1.创建一个Perceptron类

2.类中应包含weights和偏置bias

3.实现predict方法,遍历数据集,如果预测错误,则根据感知机学习规则更新权重和偏置:

w_new = w_old + learning_rate * (label - prediction) * x

b_new = b_old + learning_rate * (label -prediction)

训练你的感知机,并验证它能正确预测AND逻辑门的所有输入

#定义一个预测机

class Perceptron: #learning_rate 学习率:控制步长 #input_size (int):输入特征的数量(对于AND门是2) 比如与房价相关的特征[面积,地点,学 #区...] 有8个特征 这里的input_size 就是8 def __init__(self, input_size, learning_rate=0.1): #初始化特征对应的每一个权重 self.weights = np.random.rand(input_size) * 2 - 1 #初始化偏置,随机初始化一个值 self.bias = np.random.rand(1) *2 -1 #保存学习率 self.lr = learning_rate #bias[0] 这是一个只有一个元素的NumPy数组,[0]用来获取这个元素的值 #:.4f 这是格式说明,表明开始格式化, .4表示保留4位小数, f表示浮点数(float)形式显示 print(f"初始化权重:{self.weight},初始化偏置:{self.bias[0]:.4f}") def activation_function(self, x): return 1 if x > 0 else 0 def predict(self, inputs): weighted_sum = np.dot(self.weights, inputs) + self.bias return self.activation_function(weighted_sum) #开始训练 #trainning_inputs (list of lists):训练数据集的输入 #epochs (int):训练的轮数,即将整个数据集重复学习的次数 #labels (list):训练数据集的标签,也就是每个输入对应的正确输出 def train(self, training_inputs, labels, epochs=10): for epoch in range(epochs): total_error = 0 for inputs, label in zip(trainning_inputs, labels): #将输入转换为numpy数组 inputs = np.array(inputs) #1.进行预测 prediction = self.predict(inputs) #计算误差 error = label - prediction #如果有误差,就更新权重 if error != 0: total_error += 1 update = self.lr * error self.weights += update * inputs self.bias += update print(f"第{epochs+1}轮;错误数 = {total_error}, 当前权重 = {self.weights}, 当前偏置 = {self.bias[0]:.4f}") #如果一轮下来没有任何错误,说明已经收敛,可以结束训练 if total_error = 0: print("训练完成,模型已收敛") break print("----训练结束-----") if __name__ == "__main__": training_inputs = [ [0, 0], [0, 1], [1, 0], [0, 1] ] labels = [0, 0, 0, 1] #常见一个感知实例, 输入特征是2个 (x1, x2) perceptron = Perceptron(input_size=2) #训练感知机 其实就是不断的更新权重和偏置 perceptron.train(traning_inputs, labels) #测试训练好的感知机, AND门:因为数据集太小,我们通常用traning_inpus本身来测 #试 即test_cases = [[0, 0], [0, 1], [1, 0],[1, 1]] test_cases = [ [0, 0], [0, 1], [1, 0], [1, 1] ] for test_input in test_cases: prediction = perceptron.predict(np.array(test_input)) print(f"输入:{test_input}, 预测输出:{prediction}")

讲一下np的语法

np 是NumPy库的常用别名,NumPy是Python进行科学计算的核心库,特别擅长处理多维数据(矩阵)

np.random.rand(input_size)会创建一个形状为(input_size)的NumPy数组,其中每个元素都是[0.0, 1.0]区间内的随机浮点数

例如 如果input_size 是3,它可能会生成[0.12, 0.85, 0.34]

*2-1 (向量化操作), 这是NumPy的一个强大功能,叫做向量化, 这个操作会对数组中的每一个元素执行*2-1的计算. 而不需要写for循环

[0.0, 1.0]区间的随机数经过*2变成[0.0, 2.0],再-1就变成了[-1.0 , 1.0]区间

在机器学习中,将权重初始化在-1到1之间的对称区间通常比0到1更好,有助于模型更快,更稳定地收敛

讲一下zip的语法

zip函数把多个可迭代的对象压缩在一起,然后返回一个迭代器,这个迭代器每次会生成一个元祖(tuple),元祖中的元素分别来自于你传入的每个可迭代对象的对应位置

假设你有两个列表 一个记录学生姓名,一个记录考试成绩

students = ["小明", "小红", "小刚"] scores = [ 90, 95, 82 ] 使用zip将他们配置 paired_data = zip(students, scores) 为了看清zip的结果 我们转换成list print("list(paired_data)")
http://www.jsqmd.com/news/641625/

相关文章:

  • Ubuntu2024编译CMake时OpenSSL缺失问题全解析
  • 离心脱油后的滴鸡精:零脂肪滋补,口感与营养能否兼得?
  • 【国家级AI安全实验室内部报告】:多模态模型训练数据残留痕迹可恢复率高达68.3%——你还在用默认配置部署吗?
  • 网盘直链下载助手完整指南:八大网盘真实链接一键获取,告别下载限速烦恼
  • QOJ 14601
  • DETR目标检测实战:用PyTorch从零搭建你的第一个Transformer检测模型
  • 启用 Hyper-V
  • 为什么你的多模态模型在仿真中跑分99.2%,实车却触发127次紧急接管?:基于200万km真实路测数据的跨域泛化失效根因图谱
  • 快速上手Gemma-3-12B-IT聊天助手:WebUI部署与使用技巧
  • 3步搞定微信聊天记录永久备份:WeChatExporter让珍贵回忆永不丢失
  • 2026年AI编程实战指南:三大工具深度对比与选型建议
  • golang如何监听以太坊事件日志_golang以太坊事件日志监听技巧
  • 如何在5分钟内部署完整的PPTist在线演示文稿编辑器
  • 执医刷题封神APP|2026实测不踩坑,碎片化时间也能冲高分 - 品牌测评鉴赏家
  • 深入解析无感无刷电机电调:从KV值到PWM信号,手把手教你用STM32定时器实现精准调速
  • 【RK3588】正点原子开发板资料全解析:从SDK到镜像一站式指南
  • C#怎么限制文本框只能输入中文_C#如何应用正则表达式【妙招】
  • Winform部署HalconAI深度学习模型
  • 如何15分钟内快速集成Claude Code技能自动激活系统
  • 接口的综合案例
  • 解决网页文本选中后换行符丢失导致段落数统计错误的问题
  • 3个理由告诉你为什么MPC-HC仍是Windows平台最佳媒体播放器
  • 如何快速集成免费实时汇率API到你的应用
  • 智能待办工具推荐支持多端同步提醒很贴心
  • 安卓手机离线运行deepseek大模型:Termux与ollama实战指南
  • 2026执医备考|不踩坑资料清单,小白/在职党直接抄作业 - 品牌测评鉴赏家
  • MongooseIM性能测试实践:如何验证你的XMPP服务器承载能力
  • Halcon深度学习之异常检测
  • AI Agent 如何自我进化?Hermes Agent Self-Evolution 深度解析
  • 测试服务器端口能否访问(使用telnet命令)