(实践)单层感知器——异或问题线性神经网络,Delta学习规则线性神经网络解决异或问题

本文主要是介绍(实践)单层感知器——异或问题线性神经网络,Delta学习规则线性神经网络解决异或问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

'''
异或
0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
'''
import numpy as np
import matplotlib.pyplot as plt
#输入数据
X = np.array([[1,0,0],[1,0,1],[1,1,0],  [1,1,1]])
#标签
Y = np.array([[-1],[1],[1],[-1]])#权值初始化,3行1列,取值范围-1到1
W = (np.random.random([3,1])-0.5)*2print(W)
#学习率设置
lr = 0.11
#神经网络输出
O = 0def update():global X,Y,W,lrO = np.sign(np.dot(X,W)) # shape:(3,1)W_C = lr*(X.T.dot(Y-O))/int(X.shape[0])W = W + W_C

在这里插入图片描述

for i in range(100):update()#更新权值print(W)#打印当前权值print(i)#打印迭代次数O = np.sign(np.dot(X,W))#计算当前输出  if(O == Y).all(): #如果实际输出等于期望输出,模型收敛,循环结束print('Finished')print('epoch:',i)break#正样本
x1 = [0,1]
y1 = [1,0]
#负样本
x2 = [0,1]
y2 = [0,1]#计算分界线的斜率以及截距
k = -W[1]/W[2]
d = -W[0]/W[2]
print('k=',k)
print('d=',d)xdata = (-2,3)plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()#最后的结果我们发现它是执行了100次才跳出循环,说明无法用一条直线来进行非线性分类问题

在这里插入图片描述
线性神经网络
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
#输入数据
X = np.array([[1,3,3],[1,4,3],[1,1,1],[1,0,2]])
#标签
Y = np.array([[1],[1],[-1],[-1]])#权值初始化,3行1列,取值范围-1到1
W = (np.random.random([3,1])-0.5)*2print(W)
#学习率设置
lr = 0.11
#神经网络输出
O = 0def update():global X,Y,W,lrO = np.dot(X,W)  #因为线性用得函数是y=x所以这里可以直接写,而不是引用激活函数W_C = lr*(X.T.dot(Y-O))/int(X.shape[0])W = W + W_C

在这里插入图片描述

for _ in range(100):update()#更新权值#正样本x1 = [3,4]y1 = [3,3]#负样本x2 = [1,0]y2 = [1,2]#计算分界线的斜率以及截距k = -W[1]/W[2]d = -W[0]/W[2]print('k=',k)print('d=',d)xdata = (0,5)plt.figure()plt.plot(xdata,xdata*k+d,'r')plt.scatter(x1,y1,c='b')plt.scatter(x2,y2,c='y')plt.show()

在这里插入图片描述
过程
在这里插入图片描述
Delta学习规则
在这里插入图片描述
在这里插入图片描述
梯度下降法——一维情况
在这里插入图片描述
梯度下降法——二维情况
在这里插入图片描述
在这里插入图片描述
解决异或问题
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
#输入数据
X = np.array([[1,0,0,0,0,0],[1,0,1,0,0,1],[1,1,0,1,0,0],[1,1,1,1,1,1]])
#标签
Y = np.array([-1,1,1,-1])#权值初始化,3行1列,取值范围-1到1
W = (np.random.random(6)-0.5)*2print(W)
#学习率设置
lr = 0.11
#计算迭代次数
n = 0
#神经网络输出
O = 0def update():global X,Y,W,lr,nn+=1O = np.dot(X,W.T)  #因为线性用得函数是y=x所以这里可以直接写,而不是引用函数W_C = lr*((Y-O.T).dot(X))/int(X.shape[0])W = W + W_C

在这里插入图片描述

for _ in range(1000):update()#更新权值
#     print(W)#打印当前权值
#     print(n)#打印当前迭代次数# -0.1,0.1,0.2,-0.2#-1,1,1,-1
#     o = np.sign(np.dot(X,W.T))#计算当前输出
#     if(O == Y.T).all(): #如果实际输出等于期望输出,模型收敛,循环结束
#         print('Finished')
#         print('epoch:',n)
#         break#正样本
x1 = [0,1]
y1 = [1,0]
#负样本
x2 = [0,1]
y2 = [0,1]#计算分界线的斜率以及截距
#     k = -W[1]/W[2]
#     d = -W[0]/W[2]
#     print('k=',k)
#     print('d=',d)def calculate(x,root):a = W[5]b = W[2]+x*W[4]c = W[0]+x*W[1]+x**2*W[3]if root==1:return (-b+np.sqrt(b*b-4*a*c))/(2*a)if root==2:return (-b-np.sqrt(b*b-4*a*c))/(2*a)xdata = np.linspace(-1,2)plt.figure()plt.plot(xdata,calculate(xdata,1),'r')
plt.plot(xdata,calculate(xdata,2),'r')plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()print(W)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

o = np.dot(X,W.T)
print(o)

在这里插入图片描述

这篇关于(实践)单层感知器——异或问题线性神经网络,Delta学习规则线性神经网络解决异或问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400511

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监