第四章.神经网络—线性神经网络,Delta学习规则

news2025/1/8 12:30:39

第四章.神经网络

4.2 线性神经网络与Delta学习规则

线性神经网络在结构上与感知器非常相似,只是激活函数不同。在模型训练时把原来的sign函数改成purelin函数:y = x

1.激活函数

在这里插入图片描述

2.线性神经网络示例

1).题目:

  • 假设平面坐标系上有四个点,(3,3),(4,3)这两个点是标签1,(1,1),(0,2)这两个点的标签为-1,构建神经网络来分类。

2).思路:

  • 我们要分类的数据是一个二维数据,我们只需要两个输入节点,我们可以把神经元的偏置值也设置为一个输入节点,这样我们就有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,激活函数为purelin函数

  • 斜率(k)和截距(b)的公式推导:
    ①.数据的输入:Xi=[1,xi ,yi ],对应的权重W=[w0 ,w1 ,w2 ]; 求∑ XiWi=0;
    ②.即求:w0 +xiw1 +yiw2 = 0
    ③.所以:yiw2 = -w0 -xiw1
    ④.即:yi= -(w0/w2)-(w1/w2)xi
    ⑤.斜率k=-(w1/w2)
    ⑥.截距b=-(w0/w2)

3).代码:

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]])

# 随机初始化权重,范围[-1,1]
W = (np.random.random([3, 1]) - 0.5) * 2

# 神经网络输出
Output = 0

# 学习率
lr = 0.11


# 更新权重的函数
def update():
    global X, Y, W, lr
    Output = np.dot(X, W)  # purelin函数:y=x
    Wi = lr * (X.T.dot(Y - Output)) / int(X.shape[0])
    W = W + Wi


# 循环次数
epochs = 100

for i in range(epochs):
    update()

# 正样本
x1 = [3, 4]
y1 = [3, 3]

# 负样本
x2 = [1, 0]
y2 = [1, 2]

# 斜率和截距
k = -W[1] / W[2]
b = -W[0] / W[2]

print('k=', k)
print('b=', b)

x_data = [-2, 3]
y_data = k * x_data + b

# 画图
plt.figure()
plt.scatter(x1, y1, c='b', marker='o')
plt.scatter(x2, y2, c='y', marker='x')
plt.plot(x_data, y_data, 'r')
plt.show()

4).结果展示:

在这里插入图片描述

3.Delta学习规则

Delta(δ)学习规则是一种利用梯度下降法一般性的学习规则

1).二次代价函数:

在这里插入图片描述

  • 误差E是权向量W的函数,我们可以使用梯度下降法来最小化E的值.
    在这里插入图片描述

2).不同维度下梯度下降法示意图:

  • 一维情况
    在这里插入图片描述

  • 二维情况:
    在这里插入图片描述

3).梯度下降法的问题:

  • 学习率(η)难以选取,太大会产生震荡,太小收敛缓慢
    在这里插入图片描述

  • 容易存在局部极小值的问题
    在这里插入图片描述

4.解决异或问题的两种方式

1).Madaline可以用一种间接的方式解决线性不可分的问题

  • 方法:用多个线性函数对区域进行划分,然后对各个神经元的输出做逻辑运算,如图5-3所示,Madaline用两条直线实现了异或逻辑
    在这里插入图片描述

2).线性神经网络解决线性不可分问题:

  • 方法:对神经元添加非线性输入,从而引入非线性成分,这样做会使等效的输入维度变大,如图5-4所示:
    在这里插入图片描述

5.线性神经网络示例-异或问题(第二种方式解决异或问题示例)

1).简易图:

请添加图片描述

2).斜率(k)和截距(b)的公式推导:

①.数据的输入:Xi=[1,xi ,yi ,…],对应的权重W=[w0 ,w1 ,w2 ,…]; 求∑ XiWi=0;
②.即求:x0w0 +x1w1 +x2w2 +x12w3 +x1x2w4 +x22w5 = 0
③.所以:w0 +xw1 +yw2 +x2w3 +xyw4 +y2w5 = 0
④.所以:y2w5 +y(w2 +xw4)+w0+xw1+x2w3 = 0
⑤.求根公式为:y=(-b±√b2-4ac)/2a
⑥.a=w5
⑦.b=w2+xw4
⑧.c=w0+xw1+x2w3

3).代码:

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])

# 随机初始化权重
W = (np.random.random(6) - 0.5) * 2
print(W)

# 神经网络输出
Output = 0
Output = 1

# 学习率
lr = 0.11


# 更新权重函数
def update():
    global X, Y, W, lr, n
    Output = np.dot(X, W)  # purelin:y=x
    Wi = lr * (X.T.dot(Y - Output)) / int(X.shape[0])
    W = W + Wi


# 循环次数
epochs = 100
for i in range(epochs):
    update()

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

# 正样本
x1 = [0, 1]
y1 = [1, 0]

# 负样本
x2 = [0, 1]
y2 = [0, 1]


def calculate(x, root):
    a = W[5]
    b = W[2] + x * W[4]
    c = W[0] + x * W[1] + x * x * 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)


x_data = np.linspace(-1, 2)
y_data1 = calculate(x_data, 1)
y_data2 = calculate(x_data, 2)

# 画图
plt.figure()
plt.scatter(x1, y1, c='b', marker='o')
plt.scatter(x2, y2, c='y', marker='x')
plt.plot(x_data, y_data1, 'r')
plt.plot(x_data, y_data2, 'r')
plt.show()

4).结果展示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于python的二手房数据分析,思路+代码范例

本篇博客将基于 Python ,梳理二手房数据分析的整体过程。 文章目录思路整理数据分析步骤的示例代码基于 Python 的二手房分析 | 另一种代码思路整理 数据收集:从网站或其他数据源收集二手房数据,并将其存储在 CSV 或其他数据格式中。数据清洗…

Python连接Liunx中mysql数据库-多表查询【10个经典案例】

关于Python连接liunx中mysql数据库的方式在这一篇文章 Python连接Liunx中mysql数据库-保姆级教程 关于Python针对liunx中的mysql数据库进行增删改查操作的文章在这一篇可以看一下 Python连接Liunx中mysql数据库-增删改查 对于单表查询的学习可以看这一篇文章 Python对liunx中my…

帆软FineReport 实现省市区树形联动

在项目数据展示中,涉及到行政区划,省市区三级联动,运用帆软FineReport该如何实现,记录下来,方便备查。 第一步、树形数据准备 行政区划主要分为三级,即省市区,特殊的包含四个直辖市&#xff0…

【人机交互】COMP5517 HCI 课程笔记

人机交互Class 1: Overview of Human Computer Interaction人机交互的目标What does HCI involveClass 1 ContentImportance of HCISteps of HCISome HCI ProductsClass 1: Overview of Human Computer Interaction 人机交互的目标 Methods for grounding the design in real…

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jan 2023)

Windows 11, version 22H2,2023 年 1 月 更新,持续更新中… 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 最新发布 &#x1f449…

分布式session

目录 1.什么是session 2.session共享问题 2.1.session复制同步 2.2.存在客户端 2.3.一致性hash 2.4.统一存储 1.什么是session HTTP是无状态的,session是一种会话保持技术,目的就是以一种方式来记录http请求之间需要传递、交互的数据。 不是每次…

vite配置CDN和文件压缩

例子,vue3导入element-plus 打包大小 1.加载插件cdn-import yarn add vite-plugin-cdn-import -D 2.配置vite vite.config.js import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; import { autoComplete, Plugin as importTo…

PPI数据集示例项目学习图神经网络

目录PPI数据集:算法原理:代码实现:训练过程PPI数据集: 参考:https://blog.csdn.net/weixin_43580130/article/details/116449062 PPI(生物化学结构) 网络是蛋白质相互作用(Protein-Protein Interaction,P…

若依配置教程(四)代码生成

文章目录一、在数据库中新建表(代码生成的数据表)二、打开若依系统,进入代码生成界面三、编辑字段和基本信息四、解压文件夹,放到相关目录一、在数据库中新建表(代码生成的数据表) 建议在表中必须加的字段…

通信原理笔记—脉冲编码调制(PCM)

目录 脉冲编码调制(PCM): PCM概念: A、μ律的PCM编码: A律对数压缩特性的十三折线法近似: A律正输入值编码表: A、μ率的PCM编码方法: A 率的PCM译码方法: 脉冲编码调制(PCM):…

VUE 中项目启动没有问题,代码中 script 标签有蓝色波浪线标注

项目场景: VUE 中项目启动没有问题,代码中 script 标签有蓝色波浪线标注: 并且有相关的 提示信息 Virtual script not found, may missing <script lang“ts“> / “allowJs“: true / jsconfig.json.volar 问题描述…

ESP32设备驱动-Si7021温度传感器驱动

Si7021温度传感器驱动 文章目录 Si7021温度传感器驱动1、Si7021介绍2、硬件准备3、软件准备4、驱动实现1、Si7021介绍 Si7021 I2C 湿度和温度传感器是一款集成了湿度和温度传感器元件、模数转换器、信号处理、校准数据和 I2C 接口的单片 CMOS IC。 Si7021 提供精确、低功耗、工…

Springboot美容院管理系统 java idea mysql

config:主要用来存储配置文件,以及其他不怎么动用的信息 controller:项目的主要控制文件 dao: 主要用来操作数据库 entity: 实体,用来放与数据库表里对应的实体类,表中的字段对应类中的属性值,并…

【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。

一、引言 1.1 文档目的 【百分百解决在面试中遇到的些问题】 1.2 背景 此文档历经1年的时间,基本概括了深圳与广州,上干家公司的面试问题并结合基本盖了,95%以上的面试问题,文章内容比较多耐心看完必能拿下心仪的offer。在这里…

webpack 配置时包与包版本不对应导致无法启动项目

经常在配置 webpack 时因不指定具体版本导致 npm 下载下来的依赖之间互相不对应。 (简述:webpack 配置时包与包的版本对应问题,报错了去 npm 找包,链接到 github 上查看 package.json 的 peerDependencies 依赖) 例如&…

VAE算法

参考博客: From Autoencoder to Beta-VAE | LilLog 链接:https://zhuanlan.zhihu.com/p/34998569 参考视频: https://www.youtube.com/watch?vYNUek8ioAJk&ab_channelHung-yiLee 为了使模型具有生成能力,VAE 要求每个 p(Z…

健身大神都戴什么耳机、健身大佬都在用的运动耳机推荐

很多朋友在户外健身的时候喜欢戴上耳机,在音乐的节奏中去运动,现在市面上的运动耳机选择也特别丰富,不乏出现一些明明不适合运动却偏打着运动耳机的名号在售卖,这也就导致许多消费者不慎踩坑,为了能让大家选择到一款专…

45-48 微服务链路追踪组件Skywalking

skywalking是什么 分布式系统的应用程序性能监视 工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一…

RabbitMq之实现基于插件的延迟队列

死信队列通过设置延迟时间TTL能实现延迟队列的效果,但是 由于队列先入先出的特性, 如果队列头的消息过期时间很长, 后面的消息过期时间很短, 会导致后面的消息过期后不能及时被消费掉 基于死信队列的缺点,基于插件实现的延迟队列就很好地解决了这个问题。…

MySQL的事务总结(事务特性,隔离级别,脏读,不可重复读,幻读,常见问题)

MySQL的事务总结(事务四大特性,隔离级别,脏读,幻读) MYSQL官网:https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html 1、事务(transaction)的概念 事务 是一个不可再分的最小单元,事…