机器学习 (ML) 与 深度学习 (DL) 的区别
| 维度 | 机器学习 (ML) | 深度学习 (DL) |
|---|---|---|
| 数据依赖 | 在小规模数据集上表现良好。 | 性能随数据量增加而大幅提升,依赖大数据。 |
| 硬件要求 | 较低,普通 CPU 即可运行大多数算法。 | 极高,通常需要强大的 GPU 或 TPU 进行大规模计算。 |
| 特征工程 | 核心差异点:需要专家手动提取特征(Feature Engineering)。 | 自动提取:通过神经网络层自动学习数据的特征。 |
| 训练时间 | 较短(几秒到几小时)。 | 较长(几天甚至几周,取决于网络深度)。 |
| 可解释性 | 较强(如决策树、逻辑回归的逻辑清晰)。 | 较弱("黑盒"模型,难以解释中间层在学什么)。 |
深度学习 (DL) 的主要特点
-
端到端学习 (End-to-End Learning): 传统的机器学习需要将任务分解为特征提取和分类器两个阶段,而深度学习可以直接输入原始数据(如图像像素、音频信号),直接输出最终结果。
-
多层非线性变换: 通过深层的神经网络(Hidden Layers),模型能够学习到从低级(如线条、边缘)到高级(如人脸、物体)的复杂特征表达。
-
高鲁棒性与泛化能力: 在大规模数据支撑下,深度学习模型能够处理高度非结构化、高维度的复杂数据。
-
高度可扩展性: 通过增加层数或神经元数量(参数量),模型的上限非常高。
深度学习的应用场景
深度学习最擅长处理传统算法难以应对的非结构化数据。
A. 计算机视觉 (CV)
-
人脸识别: 手机解锁、安防监控。
-
目标检测: 自动驾驶汽车识别行人、车辆和交通标志。
-
医疗影像: 辅助医生通过 CT 或 MRI 切片检测肿瘤。
B. 自然语言处理 (NLP)
-
大语言模型 (LLM): 如 ChatGPT,进行对话生成、逻辑推理。
-
机器翻译: 如 Google 翻译的神经机器翻译系统,翻译更自然。
-
情感分析: 自动判断社交媒体评论的褒贬态度。
C. 语音识别与处理
-
语音转文字: 智能助手(Siri、小爱同学)的底层核心。
-
声纹识别: 通过声音特征确认用户身份。
D. 其他前沿领域
-
强化学习与博弈: 如 AlphaGo。
-
药物发现: 预测蛋白质折叠结构或模拟分子相互作用。
-
金融风控: 识别海量交易中的异常欺诈行为。
张量
元素为同一种类型的多维矩阵。
0维:标量
1维:向量
2维:矩阵
N维:张量
python
"""
PyTorch中的张量创建
torch.tensor 根据指定数据创建张量(用得多)
torch.Tensor 根据形状创建张量、也可以创建指定数据的张量
torch.IntTensor\torch.FloatTensor\torch.DoubleTensor创建指定类型的张量
"""
import torch
import numpy as np
#根据指定数据生成张量
def dm01():
#标量------张量
t1 = torch.tensor(10)
#列表------张量
data = [[1,2,3],[4,5,6]]
t2 = torch.tensor(data)
#numpy nd数组------张量
data = np.random.randint(0,10,size=(2,3))
t3 = torch.tensor(data)
def dm02():
#标量------张量
t1 = torch.Tensor(10)
#列表------张量
data = [[1,2,3],[4,5,6]]
t2 = torch.Tensor(data)
#numpy nd数组------张量
data = np.random.randint(0,10,size=(2,3))
t3 = torch.Tensor(data)
#创建指定维度张量
t4 = torch.Tensor(2,3)#两行三列
def dm03():
#标量------张量
t1 = torch.IntTensor(10)
#列表------张量
data = [[1,2,3],[4,5,6]]
t2 = torch.IntTensor(data)
#numpy nd数组------张量
data = np.random.randint(0,10,size=(2,3))
t3 = torch.IntTensor(data)
#如果类型不匹配,尝试自动转换类型
data = np.random.randint(0,10,size=(2,3))
t3 = torch.FloatTensor(data)#自动转成float,若转不了则报错
张量中默认的类型是float32(torch.FloatTensor)
创建0、1、指定值张量
**zeros()、**ones()、 full()
python
import torch
#创建两行三列的全1张量
t1 = torch.ones(2,3)
t2 = torch.tensor([[1,2],[3,4],[5,6]])
t3 = torch.ones_like(t2)#t3基于t2的形状,创建全1张量
#创建两行三列的全0张量
t1 = torch.zeros(2,3)
t2 = torch.tensor([[1,2],[3,4],[5,6]])
t3 = torch.zeros_like(t2)
#创建指定值full(形状,内容)
t1 = torch.full((2,3),255)
t2 = torch.tensor([[1,2],[3,4],[5,6]])
t3 = torch.full_like(t2)
创建线性和随机张量
- torch.arange()\torch.linspace()创建线性张量
- torch.random.initial_seed()\torch.random.manual_seed()设置随机种子(时间戳、固定)
- torch.rand/randn()创建随机浮点类型张量
- torch.randint(low,high,size=())创建随机整数类型张量
python
import torch
#创建线性张量
def dm01():
#指定范围的线性张量(开始,结束,步长)
t1 = torch.arange(0,10,2) #0,2,4,6,8
#指定范围的线性等差数列(开始,结束,元素个数)
t2 = torch.linspace(1,10,5)#1,3.25,5.5,7.75,10
#创建随机张量
def dm02():
#设置随机种子--创建好后,之后所有的随机都会用
#torch.initial_seed()#采用当前系统的时间戳作为随机种子
torch.manual_seed(3)#设置随机种子
#均匀分布的随机张量
t1 = torch.rand(size = (2,3))
#符合正态分布的随机张量
t2 = torch.randn(size = (2,3))
#创建随机整数张量
t3 = torch.randint(0,10,size = (2,3))
创建指定类型的张量
data.type(torch.DoubleTensor)
half()/double()/float()/short()/int()/long()
python
inport torch
#直接创建指定类型张量
t1 = torch.tensor([1,2,3,4,5],dtype = torch.float)#默认是float32
#类型转换type()
t2 = t1.type(torch.int16)
#指定转换
t2.half()#float16
t2.float()#float32,默认
t2.double()#float63
t2.short()#int16
t2.int()#int32
t2.long()#int64,默认