深度学习入门(3)

news2024/9/23 15:25:28

一、感知机

感知机接收多个输入信号,输出一个信号。这里所说的“信号”可以想象成电流或河流那样具备“流动性”的东西。 但是,和实际的电 流不同的是,感知机的信号只有“流 / 不流”( 1 / 0 )两种取值。在本书中, 0 对应“不传递信号”, 1 对应“传递信号”。
x 1 x 2 是输入信号,y 是输出信号, w 1 w 2 权重( w weight 的首字母)。图中的○称为“神
经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重 w 1 x 1 w 2 x 2 )。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时(w1x1+w2x2>θ),才会输出1 。这也称为“神经元被激活” 。这里将这个界 限值称为 阈值 ,用符号 θ 表示。
感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就 越高。

 二、简单逻辑电路

1.与门

用感知机表示与门

(w1, w2, θ) = (0.5, 0.5, 0.7)

当且仅当,x1=1,x2=1时,w1x1+w2x2>θ,感知机输出1

注:参数选择有无数个,这里和下文只举例说明

2.与非门

用感知机表示与非门

(w1, w2, θ) = (0.5, 0.5, 0.7)

当且仅当x1=1,x2=1时,w1x1+w2x2<θ,感知机输出0

3.或门

用感知机表示或门

(w1, w2, θ) = (0.5, 0.5, 0.1)

当且仅当x1=0,x2=0时,w1x1+w2x2<θ,感知机输出0

 三、感知机的实现

1.简单的实现

def AND(x1,x2):
    w1,w2,theta=0.5,0.5,0.7
    tmp=x1*w1+x2*w2
    if tmp<=theta:
        return 0
    elif tmp>theta:
        return 1

print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
#输出分别为0 0 0 1 符合与门的真值表

2.导入权重和偏置

将感知机的输出表达式改为b+w1x1+w2x2>0,其中b为偏置,w1w2为权重。

用Numpy实现上述功能

import numpy as np
x=np.array([0,1])#输入
w=np.array([0.5,0.5])#权重
b=-0.7
print(w*x)
print(np.sum(w*x))
print(np.sum(w*x)+b)
#结果为
#[0.  0.5]
#0.5
#-0.19999999999999996

3.使用权重和偏置的实现

#与门
import numpy as np
def AND(x1, x2):
 x = np.array([x1, x2])
 w = np.array([0.5, 0.5])
 b = -0.7
 tmp = np.sum(w*x) + b
 if tmp <= 0:
    return 0
 else:
    return 1

#与非门
def NAND(x1, x2):
 x = np.array([x1, x2])
 w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同!
 b = 0.7
 tmp = np.sum(w*x) + b
 if tmp <= 0:
     return 0
 else:
     return 1
#或门

def OR(x1, x2):
 x = np.array([x1, x2])
 w = np.array([0.5, 0.5]) # 仅权重和偏置与AND不同!
 b = -0.2
 tmp = np.sum(w*x) + b
 if tmp <= 0:
     return 0
 else:
     return 1
w 1 w 2 是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为 1 的程度)的参数。比如,若 b 0 . 1 ,则只要输入信号的加权总和超过 0 . 1 ,神经元就会被激活。但是如果 b 20 . 0 ,则输入信号的加权总和必须超过 20 . 0 ,神经元才会被激活。

四、感知机的局限性

1.异或门

异或门的真值表中,当且仅当x1x2不同时,才会输出1.

异或门不能用上述的感知机实现,具体分析如下

上图是或门的情况,由直线0.5 + x1 + x2 = 0分割开的两个空间(实际上就是直线y=-x+0.5的图像,参考书中是前面这样写的)。其中一个空间输出1,另一个空间输出0.从图中可以看出用一条直线可以分开○和△(○表示感知机输出为0,△表示感知机输出为1)

我们再看异或门的情况

很显然用一条直线是不能区分开的

2.线性和非线性

上面讨论到用直线无法区分两个区域,考虑用曲线进行分割

这样的曲线分割而成的空间称为非线性 空间,由直线分割而成的空间称为 线性 空间。

 五、多层感知机

1.已有门电路的组合

通过与门、或门、与非门的组合可以实现异或门

讲到的感知机的局限性,严格地讲,应该是“单层感知机无法表示异或门”或者“单层感知机无法分离非线性空间”。接下来,我 们将看到通过组合感知机(叠加层)就可以实现异或门。

(这个组合我是试出来的,不知道有没有什么组合的原理,书中也没讲)

2.异或门的实现

def AND(x1, x2):
     x = np.array([x1, x2])
     w = np.array([0.5, 0.5])
     b = -0.7
     tmp = np.sum(w*x) + b
     if tmp <= 0:
        return 0
     else:
        return 1
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
def XOR(x1, x2):
    s1=NAND(x1,x2)
    s2=OR(x1,x2)
    y=AND(s1,s2)
    return y

print(XOR(0,0))
print(XOR(1,0))
print(XOR(0,1))
print(XOR(1,1))
#输出为0 1 1 0 符合异或门的真值表
异或门是一种多层结构的神经网络。这里,将最左边的一列称为第 0 层,中间的一列称为第 1 层,最右边的一列称为第 2 层。
实际上,与门、或门是单层感知机,而异或门是 2 层感知机。叠加了多层的感知机也称为 多层感知机

在图 2-13 所示的 2 层感知机中,先在第 0 层和第 1 层的神经元之间进行
信号的传送和接收,然后在第 1 层和第 2 层之间进行信号的传送和接收,具
体如下所示。
1. 0 层的两个神经元接收输入信号,并将信号发送至第 1 层的神经元。
2. 1 层的神经元将信号发送至第 2 层的神经元,第 2 层的神经元输出 y

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

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

相关文章

FFmpeg: 自实现ijkplayer播放器--03UI界面设计

文章目录 UI设计流程图UI设计界面点击播放功能实现 UI设计流程图 UI设计界面 主界面 控制条 播放列表 画面显示 标题栏 设置界面 提示框 点击播放功能实现 槽函数实现&#xff1a; connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &Main…

vue表格操作列,按钮太多显示... 点击后悬浮显示全部按钮

效果: 分析原理: 一共就三步,仔细看看很简单,位置要加对,代码结构下边有demo 代码结构demo: <el-table-columnlabel"操作"align"center"fixed"right"show-overflow-tooltip><template slot-scope"scope"><el-buttonsi…

绿色地狱steam叫什么 绿色地狱steam怎么搜

绿色地狱steam叫什么 绿色地狱steam怎么搜 《绿色地狱》是一款以亚马逊雨林为背景的开放世界生存模拟游戏。玩家们扮演一名被困在丛林中的冒险者&#xff0c;玩家在游戏内需要学习采集资源、建造庇护所、狩猎和烹饪食物&#xff0c;同时要面对丛林中的危险和挑战&#xff0c;…

Java入门学习Day05

本篇文章主要有创建package、关系运算符、逻辑运算符、三元运算符和其对应的实例。 一、创建package 创建一个包&#xff0c;把我们之前或之后用到的运算符代码都放到这个package里&#xff0c;方面管理。 包的命名通常是公司的网站名称倒着写(com.mayin)&#xff0c;再加上…

简析|抖音隋总分享的人力RPO项目怎么样?

在抖音这个充满活力和创新的平台上&#xff0c;隋总以其独到的见解和深刻的行业洞察&#xff0c;吸引了众多粉丝的关注。最近&#xff0c;隋总分享的人力RPO项目引起了广泛关注&#xff0c;那么&#xff0c;这个项目究竟怎么样呢? 首先&#xff0c;人力RPO&#xff0c;即招聘流…

前端开发攻略---JS将class转换为function。满分写法无死角

1、class写法 class Example {constructor(name) {this.name name}func() {console.log(this.name)}} 2、function写法 use strictfunction Example(name) {if (!new.target) {throw new TypeError(Class constructor Example cannot be invoked without new)}this.name name…

Web 前端 Javascript笔记2

1、数组 为什么需要数组&#xff1a;因为变量只能存储一条数据&#xff0c;但是储存多条数据 数组的声明方式 1、new let a1new Array() console.log(a1) 2、字面量 let a2[1,2,4,"k",true,"zhangsan",11] console.log(a2) 数组里面可以存放不同的数据类…

html--烟花3

html <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Canvas烟花粒子</title> <meta name"keywords" content"canvas烟花"/> <meta name"description" content"can…

013_NaN_in_Matlab中的非数与调试方法

Matlab中的非数与调试方法 是什么&#xff1f; Matlab编程&#xff08;计算器使用&#xff09;中经常有个错误给你&#xff0c;这句话里可能包含一个关键词NaN。大部分学生都有过被 NaN 支配的痛苦记忆。 NaN 是 Not a Number 的缩写&#xff0c;表示不是一个数字。在 Matla…

00_STM32CubeMX如何新建一个工程

STM32CubeMX如何新建一个工程 STM32CubeMX如何新建一个工程以使用PA1口点亮LED为例子 STM32CubeMX如何新建一个工程 以使用PA1口点亮LED为例子 1.创建一个新工程 2.搜索芯片&#xff0c;然后双击 3.点击PA1引脚&#xff0c;设置为输出口 4.文件一定要保存到英文路径&#xff…

Normalizing Flows

需要学的是神经网络 f f f, 用于完成从source distribution (Pz)&#xff08;latent space&#xff0c;一般为高斯分布&#xff09;到 target distribution (Px) 的映射。 Normalizing Flows 是一种强大的生成模型&#xff0c;它通过学习一个可逆且易于计算的转换来将复杂的概…

Linux多进程开发2 - 进程间通信

1、进程间通信的概念 进程是一个独立的资源分配单元&#xff0c;不同进程之间的资源是独立的&#xff0c;没有关联&#xff0c;不能在一个进程中直接访问另一个进程的资源。但是&#xff0c;进程不是孤立的&#xff0c;不同的进程需要进行信息的交换和状态的传递等&…

【Datawhale LLM学习笔记】一、什么是大型语言模型(LLM)

文章目录 1. 什么是大模型2. 检索增强生成 RAG一、什么是 RAG二、RAG 的工作流程 3. langChain介绍一、什么是 LangChain二、LangChain 的核心组件 4. 开发 LLM 应用的整体流程一、何为大模型开发二、大模型开发的一般流程三、搭建 LLM 项目的流程简析&#xff08;以知识库助手…

明日周刊-第6期

最近一周杭州的天气起起伏伏&#xff0c;下雨就凉&#xff0c;不下雨就热。但是夏天的感觉确实是越来越浓烈了&#xff0c;又是一年夏&#xff0c;在这个夏天大家都有什么新的计划呢。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 一、我国自主研发科技壮举震惊全球航天界…

SpringBoot删除菜品模块开发(SpringMVC分割参数、事务管理、异常处理、批量删除)

需求分析与设计 一&#xff1a;产品原型 在菜品列表页面&#xff0c;每个菜品后面对应的操作分别为修改、删除、停售&#xff0c;可通过删除功能完成对菜品及相关的数据进行删除。 删除菜品原型&#xff1a; 业务规则&#xff1a; 可以一次删除一个菜品&#xff0c;也可以批…

Zookeeper中的节点类型和实现持久化的两种方式

进入zookeeper的bin目录&#xff0c;执行./zkServer.sh start ../conf/zoo.cfg启动&#xff01; Zookeeper内部的数据模型 类似于数据结构中的树&#xff0c;同时也很像文件系统的目录&#xff0c; 节点的类型 持久节点&#xff1a;create /znode 创建出的节点&#xff0c…

如何在Linux系统部署Tale并实现无公网IP远程管理内网博客网站

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale&#xff0c;Tale…

一本免费开源的电子书籍!这个 71.8k star 的项目,让你轻轻松松学会算法【文末有福利】

话说作为一名程序员&#xff0c;肯定都少不了在准备面试的时候刷 LeetCode 的算法题吧。虽然面试考察的算法题在工作中用到的非常少&#xff0c;但是确实是能让我们对常用的数据结构有更深刻的理解&#xff0c;以及对思维逻辑有很大的提升。不过枯燥的刷题可能让新手无从下手&a…

C++入门:类与对象(1)

本篇作为学习类与对象后的一些记录与感想&#xff0c;不适用于第一次接触类和对象的朋友。 目录 1.面向过程和面向对象 2.类 2.1类的基础知识 2.2 类中的访问限定符 2.3类中的函数声明定义分离&#xff08;如何在不同的文件中实现同一个类&#xff09; 2.4类的封装 2.5类…

Python+selenium的web自动化之元素的常用操作详解

前言 今天呢&#xff0c;笔者想和大家来聊聊pythonselenium的web自动化之元素的常用操作&#xff0c;废话不多说直接进入主题吧 一、常用操作 关键代码&#xff1a; 点击&#xff1a;ele.click()输入内容&#xff1a;ele.send_keys("内容")清空内容&#xff1a;el…