import numpy as np
""" 定义感知器模型结构 """
class XORGateModel():
def __init__(self):
""" 初始化权重、偏置 """
self.w = np.random.normal(size=6).reshape((3, 2)) # 权重
self.b = np.random.normal(size=3) # 偏置
self.lr = 0.1 # 学习率(超参数)
def sigmoid(self, x):
return 1/(1 + np.exp(-x))
def dsigmoid(self, x):
y = self.sigmoid(x)
return y * (1 - y)
def forward(self, x):
""" 前向计算 """
y1 = self.sigmoid((x[0]*self.w[0][0]) + (x[1]*self.w[0][1]) + self.b[0])
y2 = self.sigmoid((x[0]*self.w[1][0]) + (x[1]*self.w[1][1]) + self.b[1])
y3 = self.sigmoid((y1*self.w[2][0]) + (y2*self.w[2][1]) + self.b[2])
return y3
def update_weight(self, x, n, d):
e = (x[0] * self.w[n][0]) + (x[1] * self.w[n][1]) + self.b[n]
self.w[n][0] = self.w[n][0] + (self.lr * d * self.dsigmoid(e) * x[0])
self.w[n][1] = self.w[n][1] + (self.lr * d * self.dsigmoid(e) * x[1])
self.b[n] = self.b[n] + (self.lr * d * self.dsigmoid(e))
def train(self, X, Y):
"""
X,Y -- 训练集
"""
for i in range(100000): # 迭代
j = 0
C = 0
for xi in X:
yi = self.forward(xi) # 前向计算
Ci = np.power((Y[j] - yi), 2) / 2 # 计算误差
C += Ci
# 更新权重跟偏置
if Ci > 0:
d = Y[j] - yi
d1 = self.w[2][0] * d
d2 = self.w[2][1] * d
self.update_weight(xi, 0, d1) # 节点1
self.update_weight(xi, 1, d2) # 节点2
self.update_weight(xi, 2, d) # 节点3
j += 1
print("epoch{} 误差:{}, 权重:{}".format(i, C, self.w))
# 什么时候退出?
if C <= 0.05:
print("=== 与门的4数据都正确了, 退出迭代")
break
if __name__ == "__main__":
# 训练
import data_manager
X, Y = data_manager.get_xy_data() # 读取数据集
model = XORGateModel() # 实例化类对象
model.train(X, Y) # 执行训练
# 验证训练结果是否正确
for xi in X:
print("验证 输入:{} 模型的前向计算结果:{}".format(xi, model.forward(xi)))
# 保存模型参数
np.savez("./params", model.w, model.b)
002多层感知器例子 - Numpy(没有用框架)实现异或门模型代码
需积分: 10 149 浏览量
2023-03-12
22:00:25
上传
评论
收藏 4KB ZIP 举报
AI学长
- 粉丝: 352
- 资源: 26
最新资源
- 5uonly.apk
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- 基于JSP毕业设计-基于WEB操作系统课程教学网站的设计与实现(源代码+论文).zip
- 基于LM324和LM386的音响放大器Multisim仿真+PCB电路原理图
- Python机器学习与数据挖掘环境配置与库验证
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈