04阶段:深度学习

一、深度学习简介

○ 什么是深度学习

机器学习是实现人工智能的一种途径。

深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。

深度学习是机器学习中一种基于对数据进行特征学习的算法。

深度学习是基于人工神经网络,深度是指网络中使用多层,每层都通过非线性变换处理数据,并逐渐提取出更复杂、更抽象的特征。

传统机器学习算法依赖人工设计特征,并进行特征提取;而深度学习方法不需要人工,而是依赖算法自动提取特征。

深度学习通过模仿人脑的神经网络来处理和分析复杂的数据,从大量数据中自动提取复杂特征。这也是深度学习被看做黑盒子,可解释性差的原因。

深度学习尤其擅长处理高维数据,如图像、语音和文本。

○ 深度学习特点

**① 多层非线性变换:**深度学习模型由多个层次组成,每一层都应用非线性激活函数对输入数据进行变换。较低的层级通常捕捉到简单的特征(如边缘、颜色等),而更高的层级则可以识别更复杂的模式(如物体或面部识别)。

**② 自动特征提取:**与传统机器学习算法不同,深度学习能够自动从原始数据中学习到有用的特征,而不需要人工特征工程。这使得深度学习在许多领域中表现出色。

**③ 大数据和计算能力:**深度学习模型通常需要大量的标注数据和强大的计算资源(如GPU)来进行训练。大数据和高性能计算使得深度学习在图像识别、自然语言处理等领域取得了显著突破。

**④ 可解释性差:**深度学习模型内部的运作机制相对不透明,被称为"黑箱",这意味着理解模型为什么做出特定决策可能会比较困难。这对某些应用场景来说是一个挑战。

○ 常见的深度学习模型

线性归回→ANN人工神经网络→RNN→Transformer→大模型

● 卷积神经网络 (Convolutional Neural Networks,CNN)

● 循环神经网络(Recurrent Neural Networks,RNN)

● 自编码器(Autoencoders)

● 生成对抗网络 (Generative Adversarial Networks,GAN)

● Transformer

● 深度强化学习 (Deep Reinforcement Learning,DRL)

● 图神经网络(GNN,Graph Neural Network)

○ 应用场景

● 计算机视觉

● 自然语言处理

● 自动驾驶

● 推荐系统

● 医疗健康

● 工业与制造业

● 语音与音频处理

● ...


二、PyTorch框架使用

1.PyTorch框架简介

PyTorch一个基于Python语言的深度学习框架,它将数据封装成张量(Tensor)来进行处理。

PyTorch提供了灵活且高效的工具,用于构建、训练和部署机器学习和深度学习模型。

PyTorch广泛应用于学术研究和工业界,特别是在计算机视觉、自然语言处理、强化学习等领域。
PyTorch的安装:

pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

(Anaconda开发环境自带的有,不用执行命令)
PyTorch特点

● 类似于NumPy的张量计算

● 自动微分系统

● 深度学习库

● 动态计算图

● GPU加速(CUDA支持)

● 支持多种应用场景

● 跨平台支持

● ...

2.张量创建

○ 什么是张量

  • PyTorch中的张量就是元素为同一种数据类型的多维矩阵。在PyTorch中,张量以"类"的形式封装起来,对张量的些运算、处理的方法被封装在类中。

  • PyTorch张量与NumPy数组类似,但PyTorch的张量具有GPU加速的能力(通过CUDA),这使得深度学习模型能够高效地在GPU上运行。

  • PyTorch提供了对张量的强大支持,可以进行高效的数值计算、矩阵操作、自动求导等。张量是PyTorch 中的核心数据抽象,PyTorch支持各种张量子类型。通常地,一维张量称为向量/矢量(vector),二维张量称为矩阵(matrix)。
    掌握:

什么是张量

torch.tensor

torch.rand
torch.randint
torch.manual_seed

torch.zeros

torch.ones

○ 张量的基本创建方式

● torch.tensor 根据指定数据创建张量

● torch.Tensor 根据形状创建张量,其也可用来创建指定数据的张量

● torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量

○ 创建线性和随机张量

● torch.arange() 和 torch. linspace() 创建线性张量

● torch.random.initial_seed() 和 torch.random.manual_seed() 随机种子设置
● torch.rand/randn() 创建随机浮点类型张量
● torch.randint(low,high,size=()) 创建随机整数类型张量

○ 创建0、1、指定值张量

● torch.ones 和 torch.ones_like 创建全1张量
● torch.zeros 和 torch.zeros_like 创建全0张量

● torch.full 和 torch.full_like 创建全为指定值张量

○ 张量元素类型转换

● data.type(torch.DoubleTensor)

● data.half/double/float/short/int/long()

○ 掌握

基本创建 torch.tensor(数据)

线性张量 torch.arange(start,end,step)

torch.linspace(low,high,steps)

随机张量 rand、randn、randint

manual_seed()

指定值张量 ones、ones_like、full、full_like

修改张量【中】元素数据类型 张量对象.type(类型)

3.张量类型转换

○ 张量转换为NumPy数组

● 使用 Tensor.numpy 函数可以将张量转换为 ndarray 数组,但是共享内存,可以使用 copy 函数避免共享。

● 使用 torch.tensor 可以将 ndarray 数组转换为 Tensor,默认不共享内存。

张量对象.numpy()。默认是共享内存,可以在numpy()加上copy()实现不共享内存

○ NumPy数组转换为张量

● 使用 from_numpy 可以将 ndarray 数组转换为 Tensor,默认共享内存,使用 copy 函数避免共享。

● 使用 torch.tensor 可以将 ndarray 数组转换为 Tensor,默认不共享内存。

不共享内存:torch.tensor(ndarray)

共享内存:torch.from_numpy(ndarray)

○ 标量张量和数字转换

● 对于只有一个元素的张量,使用item(函数将该值从张量中提取出来

#当张量只包含一个元素时,可以通过item()函数提取出该值

python 复制代码
import torch
import numpy as np

# 1 ------------- 张量转成Numpy -------------
t1 = torch.tensor([1, 2, 3])
print(t1)
# 默认共享内存
arr1 = t1.numpy()  # ndarray
print(type(arr1))
print(arr1)

# 使用copy,不共享内存。就是一个深拷贝
arr1 = t1.numpy().copy()

t1[1] = 999
print(f"张量:{t1}")  # 张量:tensor([  1, 999,   3])
print(f"Numpy:{arr1}")  # Numpy:[1 2 3]

# 2 ------------- Numpy转成张量 -------------
arr2 = np.array([112, 2, 33])
print(type(arr2))

# form_numpy会共享内存
t2 = torch.from_numpy(arr2)
print(t2)

arr2[1] = 999
print(f"Numpy:{arr2}")
print(f"张量:{t2}")

print('---------------------------------')

# torch.tensor(Numpy)不会共享内存
t3 = torch.from_numpy(arr2)
print(t3)

arr2[1] = 666
print(f"Numpy:{arr2}")
print(f"张量:{t3}")

# 3 ------------- 标量转成张量 -------------
t4 = torch.tensor(data=999)
print(t4)

# 4 ------------- 张量转成标量 -------------
t5 = torch.tensor(data=999)
print(type(t5))

result = t5.item()
print(type(result))
print(result)

# 注意事项:
t6 = torch.tensor(data=[11, 22])
result_2 = t6.item()
print(result_2)

○ 提取标量张量的数值

○ 掌握

torch.tensor

张量对象.item()

4.张量数值计算

● 张量的基本运算

加减乘除取负号:

    • * / *-1

add、sub、mul、div、neg

add_、sub_、mul_、div_、neg_(其中带下划线的版本会修改原数据)

● 点乘运算

点乘(Hadamard)的是相同形状的张量对应位置的元素相乘,使用mull和运算符*实现。

● 矩阵乘法运算

矩阵乘法运算要求第一个矩阵shape:(n,m),第二个矩阵shape:(m,p),两个矩阵点积运算shape为:(n,p)。

1.运算符@用于进行两个矩阵的乘积运算

2.torch.matmul对进行乘积运算的两矩阵形状没有限定。对于输入的shape不同的张量,对应的最后几个维度必符合矩阵运算规则

python 复制代码
import torch
import numpy as np

# 设置随机数种子
torch.manual_seed(129)

# 1------------ 算术运算 ------------
t1 = torch.randint(low=-3, high=5, size=(3, 4))  # 创建3行4列的二位张量
print(t1)

# 【掌握】+-*/
t2 = t1 + 10
t3 = t1 * 10

print(f"加法:{t2}")
print(f"乘法:{t3}")

# 函数
t4 = t1.add(20)
t5 = t1.mul(20)  # mul → multi乘法
t6 = t1.neg()  # 正数变负数,负数变正书
print(f"加法:{t4}")
print(f"乘法:{t5}")
print(f"取负数:{t6}")

# 带下划线的函数,原始数据会收到影响
# t1.add_(20) # 推荐的写法
t7 = t1.add_(20)
print(f"t1 → {t1}")
print(f"t7 → {t7}")

# 2------------ 张量点乘 ------------
"""
    点乘总结:
        1- 两个张量对应位置的元素进行乘法运算
        2- 注意:两个张量的形状必须完全相同
"""
A = torch.tensor(data=[[1, 2], [3, 4]])
B = torch.tensor(data=[[5, 6], [7, 8]])

# 下面的形状与A的不同,因此会报错
# B = torch.tensor(data=[[5, 6], [7, 8], [9, 10]])  # 3行2列

# result = A * B  # 推荐掌握
result = A.mul(B)
print(result)

# 3------------ 张量的矩阵乘法 ------------
torch.manual_seed(129)
A = torch.randint(low=1, high=5, size=(2, 3))  # 2行3列
B = torch.randint(low=1, high=5, size=(3, 4))  # 3行4列
print(f"A→{A}")
print(f"B→{B}")

result_2 = A @ B
print(f"结果:{result_2}")

5.张量运算函数

掌握:

sum()

dim=0按第0维(也就是行)计算,dim=1按第1维(也就是列)计算
● tensor.mean(dim=):平均值

● tensor.sum(dim=):求和、掌握

● tensor.min/max(dim=):最小值/最大值

● tensor.pow(exponent=):幂次方xⁿ

● tensor.sqrt:平方根

● tensor.exp():指数e^x

● tensor.log():对数以e为底

● dim=0按第0维(也就是行)计算,dim=1按第1维(也就是列)计算

python 复制代码
import torch

t1 = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float)
print(t1)

# sum求和。【掌握】
s_1 = t1.sum()  # 将张量中所有的元素值进行求和
s_2 = t1.sum(dim=0) # 按第一个维度进行计算
s_3 = t1.sum(dim=1) # 按第二个维度进行计算
s_4 = t1.sum(dim=-1) # 按最后一个维度进行计算,常用

print(s_1)
print(s_2)
print(s_3)
print(s_4)

# 其他计算函数
t2 = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float)
print(t2)
mean_result = t2.mean()  # 算均值=21/6
print(mean_result)

min_result = t2.min()
print(min_result)

sqrt = t2.sqrt()
print(sqrt)

log2_result = t2.log2()
print(log2_result)

6.张量索引操作

7.张量形状操作

8.张量拼接操作

9.自动微分模块【掌握】

10.PyTorch模拟线性回归模型【掌握】

相关推荐
weelinking1 天前
【2026】08_Claude与版本控制:Git协作技巧
数据库·人工智能·git·python·数据挖掘·交互·cloudera
黄焖鸡能干四碗1 天前
固定资产管理系统建设方案和源码(Java源码)
大数据·数据库·人工智能·物联网·区块链
颖火虫盟主1 天前
AI DSL — 为 AI Skill 设计“自然语言脚本语法“的探索
人工智能
初学大模型1 天前
载体的背叛:论脉冲编码在神经形态计算中的物理困境
人工智能
叶子Talk1 天前
xAI发布Grok Build,全球AI终端展深圳开幕:AI从云端走向终端
人工智能·ai·agent·xai·grok build·终端ai
EAIReport1 天前
Agent开发+Vibe Coding:数据本体论筑牢AI开发效率与可靠性双防线
大数据·人工智能
MediaTea1 天前
AI 术语通俗词典:优化器
人工智能
X54先生(人文科技)1 天前
《元创力》纪实录·实战篇先卷后观:碳硅对位范式的首次实战归档
人工智能·ai写作·开源协议
Risk Actuary1 天前
快速傅里叶变换与聚合风险精算模型
人工智能·深度学习·机器学习
莱歌数字1 天前
ANSYS模拟仿真不锈钢件激光焊接变形量
人工智能·科技·电脑·制造·散热