day01 深度学习介绍

目录

1.1深度学习介绍

1.2神经网络NN

1、概念:

2、神经元

3、(单层)神经网络

4、感知机(两层)

5、多层神经网络

6、激活函数

(1)饱和与非饱和激活函数

(2)饱和激活函数

① Sigmoid激活函数

② tanh激活函数

(3)非饱和激活函数

① ⚠️ReLU激活函数

② Leaky Relu激活函数

③ ELU激活函数

1.3pytorch安装+入门

1、pytorch安装

2、Tensor张量

3、张量的创建方法

4、张量的方法和属性

5、tensor的数据类型

6、tensor的其他操作

(1)tensor 和 tensor相加。

(2)tensor和数字操作

(3)CUDA中的tensor

1.4梯度下降和反向传播

1、梯度

2、梯度下降

3、常见的导数的计算

4、反向传播

5、使用Pytorch完成线性回归

6、手动实现线性回归。

7、nn.Module 


1.1深度学习介绍

1、深度学习

        机器学习的分支。人工神经网络为基础,对数据的特征进行学习的方法。

2、机器学习和深度学习的区别:

【特征抽取】:

  • 机器学习:人工的特征抽取。
  • 深度学习:自动的进行特征抽取。

【数据量】:

  • 机器学习:数据少,效果不是很好
  • 深度学习:数据多,效果更好

3、深度学习应用场景:

  • 图像识别:物体识别、场景识别、人脸检测跟踪、人脸身份认证。
  • 自然语言处理技术:机器翻译、文本识别、聊天对话。
  • 语音技术:语音识别

4、深度学习框架:pytorch

  • 目前企业常见的深度学习框架有很多:TensorFlow、Caffe2、Theano、Pytorch、Chainer、DyNet、MXNet等。

1.2神经网络NN

1、概念:

又称为人工神经网络ANN(Artificial Netural Network)。简称神经网络(NN)或类神经网络。模拟生物的神经系统,对函数进行估计或近似。

2、神经元

概念:神经网络中的基础单元,相互连接,组成神经网络。

其中:

①a1、a2... an为各个输入的分量。

②w1、w2...wn为各个输入分量对应的权重参数。

③b为偏置

④f为激活函数。常见的激活函数有tanh、sigmoid、relu

⑤t为神经元的输出。

使用数学公式表示:t = f(W^T A + b)      其中:   W^{T}表示W的转置

对公式的理解:输出 = 激活函数( 权重*输入求和 + 偏置)

可见:一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。

3、(单层)神经网络

最简单的神经网络的形式。

4、感知机(两层)

  • 两层的神经网络。
  • 简单的二分类的模型,给定阈值,判断数据属于哪一部分。

5、多层神经网络

  • 输入层、
  • 输出层、
  • 隐藏层:可以有多层,每一层的神经元的个数可以不确定。

全连接层:当前层和前一层每个神经元相互连接,我们称当前这一层为全连接层。
即:第N层和第N-1层中的神经元两两之间都有连接。

  • 进行的是 y = Wx + b

6、激活函数

作用:

  • 增加模型的非线性分割能力。
  • 提高模型稳健性
  • 缓解梯度消失问题
  • 加速模型收敛等。

(1)饱和与非饱和激活函数

相对于饱和激活函数,使用非饱和激活函数的优势在于:

  • 非饱和激活函数能解决深度神经网络(层数非常多)带来的梯度消失问题。
  • 使用非饱和激活函数能加快收敛速度。

(2)饱和激活函数

① Sigmoid激活函数

数学表达式为:f (x) = \frac{1}{1+e^{-x}}

求导:{f}'(x)= f(x)(1-f(x))

结果:输出值范围为(0,1)之间的实数。

② tanh激活函数

数学表达式为:f(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}

实际上,Tanh函数是 sigmoid 的变形:\tan h(x) = 2sigmoid(2x) - 1

tanh是“零为中心”的。

结果:输出值范围为(-1,1)之间的实数。

(3)非饱和激活函数

① ⚠️ReLU激活函数

数学表达式为:f(x) = max(0,x)

使用场景:

  • ReLU解决了梯度消失的问题,当输入值为正时,神经元不会饱和
  • 由于ReLU线性、非饱和的性质,在SGD中能够快速收敛
  • 计算复杂度低,不需要进行指数运算

缺点:

  • 与Sigmoid一样,其输出不是以0为中心的

② Leaky Relu激活函数

数学表达式为:f(x) = max(ax,x)

什么情况下适合使用Leaky ReLU?

  • 解决了ReLU输入值为负时神经元出现的死亡的问题
  • Leaky ReLU线性、非饱和的性质,在SGD中能够快速收敛
  • 计算复杂度低,不需要进行指数运算
③ ELU激活函数

数学表达式为:

1.3pytorch安装+入门

1、pytorch安装

2、Tensor张量

各种数值数据称为张量。

0阶张量:常数 scaler

1阶张量:向量vector

2阶张量:矩阵matrix

3阶张量:...

3、张量的创建方法

打开jupyter,使用命令jupyter notebook

(1)使用python中的列表或者序列创建tensor

(2)使用numpy中的数组创建tensor

(3)使用torcch的api创建tensor

①torch.empty(3,4) 创建3行4列的空的tensor,会用无用数据进行填充。

②torch.ones(3,4) 创建3行4列的全为1 的tensor

③torch.zeros(3,4) 创建3行4列的全为0的tensor


 

④torch.rand(3,4) 创建3行4列的随机值的tensor,随机值的区间是[0,1)

⑤torch.randint( low = 0,high = 10, size = [3,4]) 创建3行4列的随机整数的tensor,随机值的区间是[ low,high)

⑥torch.randn([3,4]) 创建3行4列的随机数的tensor ,随机值的分布均值为0,方差为1

(这里的randn ,n表示normal)

4、张量的方法和属性

(1)获取tensor中的数据(当tensor中只有一个元素可用):tensor.item( )

(2)转化为numpy数组

(3)获取形状:tensor.size()
tensor.size(0)  获取第一个维度的形状

(4)形状改变:tensor.view((3,4)) 。类似numpy中的reshape,是一种浅拷贝,仅仅是形状发生改变。

(5)获取维数:tensor.dim()


(6)获取最大值:tensor.max()

(7)转置:tensor.t()   二维

高维:tensor.transpose(1,2)  将第一维度和第二维度交换、tensor.permute(0,2,1)

(8)获取tensor[1,3] 获取tensor中第一行第三列的值。(行和列的索引都是从0开始


(9)tensor[1,3] 对tensor中第一行,第散列的位置进行赋值。

(10)tensor切片:

图片所示,取了第一列。

5、tensor的数据类型

(1)获取tensor 的数据类型:tensor.dtype

(2)创建数据的时候指定类型

(3)类型的修改

6、tensor的其他操作

(1)tensor 和 tensor相加。

x.add(y)  不会直接修改x的值。

x.add_(y) 会直接修改x的值。⚠️


(2)tensor和数字操作


(3)CUDA中的tensor

通过.to 方法能够把一个tensor转移到另外一个设备(比如从CPU转到GPU)

# 实例化device
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')# 把tensor转化为CUDA支持的tensor,或者cpu支持的tensor
tensor.to(device)

1.4梯度下降和反向传播

1、梯度

概念:梯度是一个向量,导数+变化最快的方向(学习的前进方向)

回顾下机器学习:

       ① 收集数据x,构建机器学习模型f,得到f(x,w) = Ypredict

        ②判断模型好坏的方法:

loss = (Ypredict - Ytrue)^2   ( 回归损失)
loss = Ytrue · log(Yredict)    (分类损失)

        ③目标:通过调整(学习)参数w,尽可能的降低loss。

2、梯度下降

算出梯度、

3、常见的导数的计算

链式法则、求偏导数、

4、反向传播

(1)前向传播:将训练集数据输入到ANN的输入层,经过隐藏层,最后到达输出层并输出结果。【输入层—隐藏层–输出层】

(2)反向传播:由于ANN的输入结果与输出结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层。【输出层–隐藏层–输入层】

(3)权重更新:在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。

5、使用Pytorch完成线性回归

(1)tensor(data, requires_grad = True)

① 该tensor后续会被计算梯度、tensor所有的操作都会被记录在grade_in 

② 当requires_grad = True时,tensor.data 和 tensor不相同。否则,得到是相同的结果。

(2)with torch.no_grad()

其中的操作不会被跟踪

(3)反向传播:output.backward()

(4)获取某个参数的梯度:x.grad   累加梯度,每次反向传播之前需要先把梯度置为0之后。

6、手动实现线性回归。

假设基础模型y=wx+b , 其中w和b均为参数,我们使用y = 3x+0.8 来构造数据x,y,所以最后通过模型应该能够得出w和b应该分别接近3和0.8。

(1)准备数据(2)计算预测值
(3)计算损失,把参数的梯度置为0,进行反向传播(4)更新参数

import torch
import matplotlib.pyplot as plt
learning_rate = 0.01  # 定义一个学习率# 1、准备数据
"""
y = wx + b
y = 3x + 0.8
"""
x = torch.rand([100, 1])
y_true = x*3 + 0.8# 2、通过模型计算 y_project
w = torch.rand([1, 1], requires_grad=True)
b = torch.tensor(0, requires_grad=True, dtype=torch.float32)# 4、通过循环,反向传播,更新参数
for i in range(500):# 3、计算lossy_predict = torch.matmul(x, w) + bloss = (y_true - y_predict).pow(2).mean()  # 平方,再均值if w.grad is not None:     # 将梯度置为0w.grad.data.zero_()if b.grad is not None:b.grad.data.zero_()loss.backward()   # 反向传播w.data = w.data - learning_rate * w.gradb.data = b.data - learning_rate * b.gradprint(f"w:{w.item()},b:{b.item()},loss:{loss.item()}")# 画图
plt.figure(figsize=(20, 8))
plt.scatter(x.numpy().reshape(-1), y_true.numpy().reshape(-1))
y_predict = torch.matmul(x, w) + b
plt.plot(x.numpy().reshape(-1), y_predict.detach().reshape(-1), c='r')
plt.show()

7、nn.Module 

nn.Module 是torch.nn提供的一个类,是pytorch 中我们自定义网络的一个基类,在这个类中定义了很多有用的方法,让我们在继承这个类定义网络的时候非常简单。

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

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

相关文章

写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)

运行环境 PyCharm 2023.2.1 python3.11 具体内容 源代码 import tkinter as tk from tkinter import messagebox import threadingclass PopupGenerator:def __init__(self):self.root tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗&qu…

LeetCode---380周赛

题目列表 3005. 最大频率元素计数 3006. 找出数组中的美丽下标 I 3007. 价值和小于等于 K 的最大数字 3008. 找出数组中的美丽下标 II 一、最大频率元素计数 这题就是个简单的计数题,正常遍历统计数据即可,关键是你要会写代码逻辑。 代码如下&…

Java设计模式-代理模式(7)

馆长准备了很多学习资料,其中包含java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具 等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关注…

steam游戏搬砖项目还能火多久?

最近放假回到老家,见了不少亲戚朋友,大家不约而同都在感叹今年大环境不好,工作不顺,生意效益不好,公司状况不佳,反问我们生意如何?为了让他们心里好受一点,我也假装附和道:也不咋地&…

为什么电脑降价了?

周末,非常意外地用不到3000元买到了一款2023年度发布的华为笔记本I5,16G,500G,基本是主流配置,我非常意外,看了又看,不是什么Hwawii,或者Huuawe。然后也不是二手。为什么呢?因为在ALU和FPU之外&…

Maven 打包时,依赖配置正确,但是类引入出现错误,一般是快照(Snapshot)依赖拉取策略问题

问题描述: 项目打包时,类缺少依赖,操作 pom.xml -> Maven -> Reload project ,还是不生效,但是同事(别人)那里正常。 问题出现的环境: 可能项目是多模块项目,结构…

图论可达性c语言实现

概述 图论中的可达性是指在图中是否存在从一个顶点到另一个顶点的路径。这是图论中的一个基本概念,对于许多实际问题的建模和解决都非常重要。以下是关于图论可达性的一些重要概念和信息: 有向图和无向图: 图可以分为有向图和无向图。在有向图…

MySQL JSON数据类型

在日常开发中,我们经常会在 MySQL 中使用 JSON 字段,比如很多表中都有 extra 字段,用来记录一些特殊字段,通过这种方式不需要更改表结构,使用相对灵活。 目前对于 JSON 字段的实践各个项目不尽相同,MySQL 表…

未来趋势:视频美颜SDK与增强现实(AR)的融合

当下,视频美颜SDK不断演化,成为用户记录和分享生活时不可或缺的一部分。同时,增强现实技术也以其独特的沉浸感和交互性受到青睐,被广泛应用于游戏、教育、医疗等领域。 一、视频美颜与AR的结合 1.实时美颜的AR增值体验 借助AR的…

【Web前端开发基础】CSS的结构伪类选择器、伪元素、浮动

CSS的浮动 目录 CSS的浮动一、学习目标二、文章内容2.1 结构伪类选择器2.2 伪元素2.3 标准流2.4 浮动2.5 清除浮动2.6 拓展(BFC) 三、综合案例3.1 小米模块案例3.2 网页导航案例 一、学习目标 能够使用结构伪类选择器在HTML中选元素能够说出标准流元素的…

服务器管理平台(5)- 数据展示

数据展示 Grafana导入MySQL数据源进行定制化数据展示,包括品牌分类饼图,详细数据列表等LayUI为开源前端框架,对系统概览、登录日志等信息,划分不同页面使用表格展示详细数据 1、Grafana 对品牌、CPU型号、内存等数据使用饼图展示…

探索全球DNS体系 | 从根服务器到本地解析

DNS 发展 DNS(Domain Name System)的起源可以追溯到互联网早期。 早期的挑战: 早期互联网主要通过IP地址进行通信,用户需要记住复杂的数字串来访问网站。 需求的催生: 随着互联网的扩大,更简单、易记的…

【剑指offer】重建二叉树

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述1、题目2、示例 二、题目分析1、递归2、栈 一、题目描述 1、题目 剑指offer:重建二叉树 给定节…

在CentOS 7中配置 RAID服务

实验过程 Xnode1克隆虚拟机raid ps: 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 编辑虚拟机 添加2硬盘 CRT连接(root密码:000000) 创建raid 0 [rootdemo ~]# lsblk 安装mdadm [rootdemo…

go语言(十四)----反射

变量的结构 2 举个例子 package mainimport "fmt"type Reader interface {ReadBook() }type Writer interface {WriteBook() }//具体类型 type Book struct {}func (this *Book) ReadBook() {fmt.Println("Read a Book")}func (this *Book) WriteBook() {…

项目工时统计成本核算管理

技术架构: Java 1.8 MySQL 8 Vue 项目基于前后端分离架构,服务端主要技术:SpringBoot 前端主要是Vue。 项目介绍: 轻量级项目工时统计系统,是目前企业进行项工时管理统计的推荐选择。 通过项目工时管理系统,可通过…

Github2024-01-23 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-01-23统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3Go项目2TypeScript项目2Dart项目1Jupyter Notebook项目1 gpt4free 语言模型集合改进计划 创建周期…

vConsole 与 Vue中未定义变量而引发的Maximum call stack size exceeded异常问题

一、问题描述 前段时间有个前端小伙伴反馈在打包发布正式环境后调用VantUI的<van-popup>组件显示时&#xff0c;显示空白&#xff0c;并且在控制台看到一个Maximum call stacksize exceeded&#xff08;超出最大调用堆栈大小&#xff09;,而本地开发环境正常&#xff1a…

工业相机+镜头选型及靶面、焦距计算等相关详解

工业相机镜头选型及靶面、焦距计算等相关详解 着重讲述相机的各个参数及使用意义总结相机镜头选型主要参数的推理计算 0. 工业相机相关概念简介 相机与镜头一览 工业相机与镜头实物图如下图所示&#xff1a; 常见的相机有两种供电方式&#xff1a;一种是电源线供电&#xff0…

接口自动化测试框架开发(pytest+allure+aiohttp+ 用例自动生成)

近期准备优先做接口测试的覆盖&#xff0c;为此需要开发一个测试框架&#xff0c;经过思考&#xff0c;这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的&#xff0c;测试人员会希望很快能得到结果反馈&#xff0c;然而接口的数量一般都很多&#xff0c;而且会越来越…