网站的总体结构,wordpress 软件主题,北京楼市最新消息,小程序开发问题1. (论述题)#xff08;共1题#xff0c;100分#xff09; 假设平面坐标系上有四个点#xff0c;要求构建单层感知器实现分类。 (3,3),(4,3) 两个点的标签为1#xff1b; (1,1),(0,2) 两个点的标签为-1。 思路#xff1a;要分类的数据是2维数据#xff0c;需要2个输入…1. (论述题)共1题100分 假设平面坐标系上有四个点要求构建单层感知器实现分类。 (3,3),(4,3) 两个点的标签为1 (1,1),(0,2) 两个点的标签为-1。 思路要分类的数据是2维数据需要2个输入节点把神经元的偏置值也设置成一个节点偏置也是一个输入恒等于1总共有3个输入节点。 输入数据有4组 (1,3,3),(1,4,3),(1,1,1),(1,0,2) 对应的标签为(1,1,-1,-1) 初始化权值w0,w1,w2取-1到1的随机数 学习率设为0.11 激活函数为sign函数。 我的答案
1. 初始化
1输入数据X[[1,3,3],[1,4,3],[1,1,1],[1,0,2]]2标签Y[1,1,-1,-1]3权值向量W[w0,w1,w2]随机在[-1,1]中4学习率η 0.11
2.激活函数
sign(x) 1 if x 0 else -1
3.训练过程
1前向传播神经元输出 2计算误差 3更新权值 4若未达到“所有样本均正确分类/达到最大迭代次数”则重复1~3
4.迭代过程
可通过程序代码进行迭代其中一次迭代如下 初始权值: [ 0.58717924 -0.64675996 0.79238846] 第 1 轮迭代
样本: [1 1 1], 标签: -1, 预测: 1
权值更新量eta * (Y[i] - y_pred) * X[i]: [-0.22 -0.22 -0.22]
更新后的权值: [ 0.36717924 -0.86675996 0.57238846]
样本: [1 0 2], 标签: -1, 预测: 1
权值更新量eta * (Y[i] - y_pred) * X[i]: [-0.22 -0. -0.44]
更新后的权值: [ 0.14717924 -0.86675996 0.13238846] 第 2 轮迭代
样本: [1 3 3], 标签: 1, 预测: -1
权值更新量eta * (Y[i] - y_pred) * X[i]: [0.22 0.66 0.66]
更新后的权值: [ 0.36717924 -0.20675996 0.79238846]
样本: [1 1 1], 标签: -1, 预测: 1
权值更新量eta * (Y[i] - y_pred) * X[i]: [-0.22 -0.22 -0.22]
更新后的权值: [ 0.14717924 -0.42675996 0.57238846]
样本: [1 0 2], 标签: -1, 预测: 1
权值更新量eta * (Y[i] - y_pred) * X[i]: [-0.22 -0. -0.44]
更新后的权值: [-0.07282076 -0.42675996 0.13238846] 第 3 轮迭代
样本: [1 3 3], 标签: 1, 预测: -1
权值更新量eta * (Y[i] - y_pred) * X[i]: [0.22 0.66 0.66]
更新后的权值: [0.14717924 0.23324004 0.79238846]
样本: [1 1 1], 标签: -1, 预测: 1
权值更新量eta * (Y[i] - y_pred) * X[i]: [-0.22 -0.22 -0.22]
更新后的权值: [-0.07282076 0.01324004 0.57238846]
样本: [1 0 2], 标签: -1, 预测: 1
权值更新量eta * (Y[i] - y_pred) * X[i]: [-0.22 -0. -0.44]
更新后的权值: [-0.29282076 0.01324004 0.13238846] 第 4 轮迭代
训练在第 4 轮收敛 训练后的权值: [-0.29282076 0.01324004 0.13238846] import numpy as np# 数据
X np.array([[1, 3, 3],[1, 4, 3],[1, 1, 1],[1, 0, 2]
])
Y np.array([1, 1, -1, -1])# 初始化权值和参数
W np.random.uniform(-1, 1, 3) # 权值初始化
eta 0.11 # 学习率
max_epochs 100 # 最大迭代次数# 激活函数
def sign(x):return 1 if x 0 else -1# 训练
print(初始权值:, W)
for epoch in range(max_epochs):print(f\n 第 {epoch 1} 轮迭代 )errors 0for i in range(len(X)):# 前向传播y_pred sign(np.dot(X[i], W))# 检查预测是否正确if y_pred ! Y[i]:errors 1delta_W eta * (Y[i] - y_pred) * X[i] # 计算权值更新量W delta_W # 更新权值# 打印更新信息print(f样本: {X[i]}, 标签: {Y[i]}, 预测: {y_pred})print(f权值更新量eta * (Y[i] - y_pred) * X[i]: {delta_W})print(f更新后的权值: {W})if errors 0: # 如果没有错误分类print(f训练在第 {epoch 1} 轮收敛)break
else:print(未在最大迭代次数内收敛)print(\n训练后的权值:, W)