【学习笔记】深度学习入门:基于Python的理论与实现-Python入门与感知机

news2024/11/24 2:24:26

CONTENTS

    • 一、Python入门
      • 1.1 NumPy
      • 1.2 Matplotlib
    • 二、感知机
      • 2.1 感知机是什么
      • 2.2 简单逻辑电路
      • 2.3 感知机的实现
      • 2.4 感知机的局限性
      • 2.5 多层感知机

一、Python入门

1.1 NumPy

在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类(numpy.array)中提供了很多便捷的方法,在实现深度学习时,我们将使用这些方法。安装各种第三方库的方式详见:VS Code中安装Python机器学习与数据分析相关第三方模块教程。

导入NumPy:

import numpy as np

生成NumPy数组:

x = np.array([1.0, 2.0, 3.0])
print(x)  # [1. 2. 3.]

NumPy数组算术运算:

x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
x + y  # [3. 6. 9.]
x - y  # [-1. -2. -3.]
x * y  # [2. 8. 18.]
x / y  # [0.5 0.5 0.5]
x / 2.0  # [0.5 1. 1.5],广播功能

多维NumPy数组:

A = np.array([[1, 2], [3, 4]])
A.shape  # (2, 2),查看A的形状
A.dtype  # dtype('int64'),查看矩阵元素的数据类型

广播功能如下图所示:

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

访问矩阵元素的方式:

X = np.array([[51, 55], [14, 19], [0, 4]])
X[0]  # array([51, 55]),第0行
X[0][1]  # 55,(0, 1)位置的元素
X = X.flatten()  # 将X转换为一维数组
print(X)  # [51 55 14 19 0 4]
X[np.array([0, 2, 4])]  # array([51, 14, 0]),获取索引为0、2、4的元素

X X X中抽取大于 15 15 15的元素:

X > 15  # array([True, True, False, True, False, False], dtype=bool)
X[X > 15]  # array([51, 55, 19])

1.2 Matplotlib

在深度学习的实验中,图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。

绘制 s i n sin sin函数图像:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.arange(0, 6, 0.1)  # 以0.1为步长,生成[0, 6)的数据
y = np.sin(x)

# 绘制图形
plt.plot(x, y)
plt.show()

绘制结果如下图所示:

在这里插入图片描述

添加 c o s cos cos函数,并添加标题和 x x x轴标签名等其他功能:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.arange(0, 6, 0.1)  # 以0.1为步长,生成[0, 6)的数据
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制图形
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos")  # 用虚线绘制
plt.xlabel("x")  # x轴标签
plt.ylabel("y")  # y轴标签
plt.title('sin & cos')  # 标题
plt.legend()
plt.show()

绘制结果如下图所示:

在这里插入图片描述

pyplot中还提供了用于显示图像的方法imshow()。另外,可以使用matplotlib.image模块的imread()方法读入图像:

import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread('lena.png')  # 读入图像(设定合适的路径!这里假定图像lena.png在当前目录下)
plt.imshow(img)
plt.show()

运行上述代码后会显示下图所示的图像:

在这里插入图片描述

二、感知机

2.1 感知机是什么

感知机接收多个输入信号,输出一个信号。下图是一个接收两个输入信号的感知机的例子, x 1 , x 2 x_1,x_2 x1,x2是输入信号, y y y是输出信号, w 1 , w 2 w_1,w_2 w1,w2是权重( w w w w e i g h t weight weight的首字母)。图中的圆圈称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重( w 1 x 1 , w 2 x 2 w_1x_1,w_2x_2 w1x1,w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出 1 1 1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ \theta θ表示。

在这里插入图片描述

把上述内容用数学式来表示就如下式所示:

在这里插入图片描述

感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。

2.2 简单逻辑电路

现在考虑使用感知机来实现 A N D   g a t e AND\ gate AND gate,其真值表如下图所示:

在这里插入图片描述

满足上图条件的参数的选择方法有无数多个。当 ( w 1 , w 2 , θ ) = ( 0.5 , 0.5 , 0.7 ) (w_1,w_2,\theta )=(0.5,0.5,0.7) (w1,w2,θ)=(0.5,0.5,0.7)时,可以满足上图条件。设定这样的参数后,仅当 x 1 x_1 x1 x 2 x_2 x2同时为 1 1 1时,信号的加权总和才会超过给定的阈值 θ \theta θ

2.3 感知机的实现

用Python来实现上述的逻辑电路:

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

我们将之前数学式中的 θ \theta θ换成 − b -b b,便可用以下式子表示感知机:

在这里插入图片描述

此处, b b b称为偏置 w 1 w_1 w1 w 2 w_2 w2称为权重。感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于 0 0 0则输出 1 1 1,否则输出 0 0 0

使用权重和偏置,可以像下面这样实现与门:

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

请注意,偏置和权重 w 1 , w 2 w_1,w_2 w1,w2的作用是不一样的。具体地说, w 1 w_1 w1 w 2 w_2 w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为 1 1 1的程度)的参数。

2.4 感知机的局限性

X O R   g a t e XOR\ gate XOR gate真值表如下图所示:

在这里插入图片描述

用前面介绍的感知机是无法实现这个异或门的。以或门为例,当权重参数 ( b , w 1 , w 2 ) = ( − 0.5 , 1.0 , 1.0 ) (b,w_1,w_2)=(-0.5,1.0,1.0) (b,w1,w2)=(0.5,1.0,1.0)时,可满足其真值表条件,此时感知机可用下式表示:

在这里插入图片描述

此时感知机会生成由直线 − 0.5 + x 1 + x 2 = 0 -0.5+x_1+x_2=0 0.5+x1+x2=0分割开的两个空间。其中一个空间输出 1 1 1,另一个空间输出 0 0 0,如下图所示:

在这里插入图片描述

或门在 ( x 1 , x 2 ) = ( 0 , 0 ) (x_1,x_2)=(0,0) (x1,x2)=(0,0)时输出 0 0 0,在 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) ( 0 , 1 ) , ( 1 , 0 ) , ( 1 , 1 ) (0,1),(1,0),(1,1) (0,1),(1,0),(1,1)时输出 1 1 1。上图中,圆圈表示 0 0 0,三角形表示 1 1 1

异或门的输出如下图所示:

在这里插入图片描述

想要用一条直线将上图中的圆圈和三角形分开,无论如何都做不到。

使用曲线分割成的非线性空间即可实现以上条件:

在这里插入图片描述

2.5 多层感知机

感知机的绝妙之处在于它可以“叠加层”。异或门可以通过与门、与非门和或门组合进行实现,如下图所示:

在这里插入图片描述

假设这三种门均已实现,那么用Python实现异或门的代码如下:

def XOR(x1, x2):
	s1 = NAND(x1, x2)
	s2 = OR(x1, x2)
	y = AND(s1, s2)
	return y

下面我们试着用感知机的表示方法(明确地显示神经元)来表示这个异或门,如下图所示,异或门是一种多层结构的神经网络。这里,将最左边的一列称为第 0 0 0层,中间的一列称为第 1 1 1层,最右边的一列称为第 2 2 2层。

在这里插入图片描述

下一节:【学习笔记】深度学习入门:基于Python的理论与实现-神经网络。

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

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

相关文章

C语言函数调用的过程图解深入剖析

希望是美好的&#xff0c;也许是人间至善&#xff0c;而美好的事物永不消逝。——《肖申克的救赎》 目录 1、什么是函数栈帧&#xff1f; 2、理解函数栈帧能解决什么问题 3、函数栈帧是什么 3.1什么是栈&#xff1f; 3.2认识寄存器和汇编指令 4、函数调用的整个过程 5、…

LBA逻辑区块地址

现在很多硬盘采用同密度盘片&#xff0c;意味着内外磁道上的扇区数量不同&#xff0c;扇区数量增加&#xff0c;容量增加&#xff0c;3D很难定位寻址&#xff0c;出现了新的寻址模式&#xff1a;LBA(Logical Block Addressing)。在LBA地址中&#xff0c;地址不再表示实际硬盘的…

Mysql 并发多版本控制MVCC

什么是MVCC MVCC&#xff0c;全称Multi-Version Concurrency Control&#xff0c;即多版本并发控制。MVCC是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存。 一般情况下我们使用mysql数据库的…

Prometheus 采集vCenter7监控数据

前提要求 安装docker&#xff0c;docker-compose创建vmware_exporter目录 mkdir -p /vmware_exporter 创建基于docker部署vmware_exporter脚本 VSPHERE_HOST: "vCenter 管理地址" VSPHERE_IGNORE_SSL: "True" VSPHERE_USER: "administratorvsphere…

[附源码]计算机毕业设计springboot求职招聘网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

信创平台:查询CPU,内存等命令

信创平台&#xff1a;海光、鲲鹏服务器查询CPU,内存等命令 #1、查看操作系统(统信操作系统) 海光查询操作系统&#xff1a; cat /etc/os-release查看操作系统 cat /etc/os-version查看操作系统版本 鲲鹏查询操作系统&#xff1a;cat /etc/system-release Kylin Linux Adva…

Python图像处理【3】Python图像处理库应用

Python图像处理库应用0. 前言1. 将 RGB 图像转换为灰度图像算法1.1 算法原理3.2 算法实现2. 使用 PIL 库计算图像差异2.1 算法原理2.2 算法实现3. 使用 Scikit-image 转换图像色彩空间3.1 将 RGB 图像转换至 HSV 色彩空间3.2 将 RGB 图像转换至 YUV 色彩空间4. 用 OpenCV 调整图…

html学习笔记

1.在idea里右键创建html文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body></body> </html>在谷歌浏览器中输入chrome://version可以看…

【学习笔记】深度学习入门:基于Python的理论与实现-误差反向传播法

CONTENTS五、误差反向传播法5.1 计算图5.2 链式法则5.3 反向传播5.4 简单层的实现5.5 激活函数层的实现5.6 Affine/Softmax层的实现5.7 误差反向传播法的实现五、误差反向传播法 5.1 计算图 先引入一个很简单的问题&#xff1a;在超市买了222个100100100元一个的苹果&#xf…

[附源码]JAVA毕业设计个人饮食营养管理信息系统(系统+LW)

[附源码]JAVA毕业设计个人饮食营养管理信息系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

云原生|kubernetes|kubernetes集群使用私有镜像仓库拉取镜像(harbor或者官方的registry私有镜像仓库)

前言&#xff1a; 在实际的生产中&#xff0c;我们可能会有许多的由开发制作的docker镜像&#xff0c;这也就造成使用这些镜像需要打包成tar文件&#xff0c;然后上传到服务器内然后在导入并使用&#xff0c;但&#xff0c;kubernetes节点很多&#xff0c;有时候并不是明确的要…

13.前端笔记-CSS-盒子样式应用(圆角、阴影)

1、圆角边框 border-radius属性&#xff0c;用于设置元素的外边框圆角 原理&#xff1a;(椭)圆和矩形的两条边相切&#xff08;圆的半径就是length&#xff09;&#xff0c;形成圆角效果 属性&#xff1a; border-top-left-radius;左上 border-top-right-radius:右上 border…

B-神经网络模型复杂度分析

B-神经网络模型复杂度分析 前言一&#xff0c;模型计算量分析 卷积层 FLOPs 计算全连接层的 FLOPs 计算二&#xff0c;模型参数量分析 卷积层参数量BN 层参数量全连接层参数量三&#xff0c;模型内存访问代价计算 卷积层 MAC 计算四&#xff0c;一些概念 双精度、单精度和半精…

数苹果-第12届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第91讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

【Android】Fragment使用

使用Fragment 我们可以把页面结构划分成几块&#xff0c;每块使用一个Fragment来管理。这样我们可以更加方便的在运行过程中动态地更新Activity中的用户界面&#xff0c;日后迭代更新、维护也是更加方便。 Fragment并不能单独使用&#xff0c;他需要嵌套在Activity 中使用&…

Redis最佳实践(上)

引言 尽管 redis 是一款非常优秀的 NoSQL 数据库&#xff0c;但更重要的是&#xff0c;作为使用者我们应该学会在不同的场景中如何更好的使用它&#xff0c;更大的发挥它的价值。主要可以从这四个方面进行优化&#xff1a;Redis键值设计、批处理优化、服务端优化、集群配置优化…

某些设置由你的组织来管理

今天莫名其妙Windows更新出现&#xff1a;*某些设置由你的组织来管理 我们来看看如何恢复吧。 根据上面的图片我们可以知道&#xff0c; 可查看配置的更新策略&#xff1a; 可以看到设备设置的策略有下面几个&#xff1a; 解决方案 这个时候我们就要进入设置更改那些策略即…

Java企业微信对接(二)微信端回调到企业端

准备工作 先下载demo 下载完成后的目录,把这些类之间copy到工程里面就行,都是封装好的加密算法 回调配置 什么时候需要回调 在集成企业微信与内部系统时,我们往往需要搭建一个回调服务。回调服务,可以实现: 自定义丰富的服务行为。比如,用户向应用发消息时,识别消…

RNA-seq 详细教程:count 数据探索(4)

学习目标 了解 RNA-seq count 数据的特征比较 count 数据的不同数学模型确定最适合 RNA-seq count 数据的模型了解设置生物学重复对于鉴定样本间差异的好处1. 计数矩阵 当开始差异表达基因分析时&#xff0c;先从一个矩阵开始&#xff0c;该矩阵总结了数据集每个样本中的基因水…

ZMQ请求应答模式之无中间件的可靠性--自由者模式

一、引言 我们讲了那么多关于中间件的示例&#xff0c;好像有些违背“ZMQ是无中间件”的说法。但要知道在现实生活中&#xff0c;中间件一直是让人又爱又恨的东西。实践中的很多消息架构能都在使用中间件进行分布式架构的搭建&#xff0c;所以说最终的决定还是需要你自己去权衡…