深度学习简介
什么是深度学习
机器学习是实现人工智能的一种途径。 深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。
传统机器学习算术依赖人工设计特征,并进行特征提取,而深度学习方法不需要人工,而是依赖算法自动提取特征。 深度学习模仿人类大脑的运行方式,从经验中学习获取知识。这也是深度学习被看做黑盒子,可解释性差的原因。
应用场景
发展历史
-
符号主义 20世纪50-70:专家系统占主导 1950:图灵设计国际象棋程序 1962:IBM Arthur Samuel 的跳棋程序战胜人类高手(人工智能第一次浪潮)
-
统计主义 20世纪80-2000:主要用统计模型解决问题 •1993:Vapnik提出SVM •1997:IBM 深蓝战胜卡斯帕罗夫(人工智能第二次浪潮)
-
神经网络 21世纪初期:神经网络、深度学习流派 •2012: AlexNet深度学习的开山之作 •2016:Google AlphaGO 战胜李世石(人工智能第三次浪潮)
-
大规模预训练模型 2017-至今:大规模预训练模型 2017年,自然语言处理NLP的Transformer框架出现 2018年,Bert和GPT的出现 2022年,chatGPT的出现,进入到大模型AIGC发展的阶段
优缺点
1.优点
-
精度⾼,性能优于其他的机器学习⽅法,甚⾄在某些领域超过了⼈类
-
随之计算机硬件的发展,可以近似任意的⾮线性函数
-
近年来在学界和业界受到了热捧,有⼤量的框架和库可供调。
-
缺点
-
⿊箱,很难解释模型是怎么⼯作的
-
训练时间⻓,需要⼤量的计算⼒
-
⽹络结构复杂,需要调整超参数多
-
⼩数据集上表现不佳,容易发⽣过拟合
-
PyTorch使用
PyTorch:一个Python 深度学习框架,它将数据封装成张量(Tensor)来进行处理。PyTorch 中的张量就是元素为同一种数据类 型的多维矩阵。在PyTorch中,张量以"类" 的形式封装起来,对张量的一些运算、处理的方法被封装在类中。
Pytorch的安装: pip install torch==2.1.0 -i Simple Index
1.1张量基本创建方式
-
torch.tensor 根据指定数据创建张量
-
torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量
-
torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量
张量
-
可以理解为多维矩阵
-
标量:0维张量
-
向量:1维张量
-
矩阵:2维张量
1.2创建张量的方式
根据指定的数据创建张量
-
根据标量创建张量
data = 10 tensor = torch.tensor(data) print(f'根据标量生成的张量:\n{tensor}')
-
根据numpy数组创建张量
data = np.random.randn(2,3) #创建的2行3列的数组 data = torch.tensor(data) print(f'根据numpy数组创建张量:\n{data}')
-
根据列表创建张量
data = [1,2,3] data = torch.tensor(data) print(f'根据列表创建张量:\n{data}') data = [[1,2,3],[4,5,6]] data = torch.tensor(data) print(f'根据列表创建张量:\n{data}')
根据形状创建张量
torch.Tensor(2,3)
-
创建2行3列的张量, 默认 dtype 为 float32
data = torch.Tensor(2, 3) print(data)
-
注意: 如果传递列表, 则创建包含指定元素的张量
data = torch.Tensor([10]) print(data) data = torch.Tensor([10, 20]) print(data)
根据指定类型创建张量
torch.IntTensor:
data = torch.IntTensor(2,3) print(f'创建int32类型的张量:\n{data}')
torch.ShortTensor torch.LongTensor torch.FloatTensor:dtype为Float的张量
data = torch.FloatTensor(2,3) print(f'创建Float类型的张量:\n{data}')
torch.DoubleTensor 注意:如果传递的元素类型不正确,会被进行类型转换
data = torch.IntTensor([[2.5,3.5],[3.4,5.5]]) print(data) tensor([[2, 3], [3, 5]], dtype=torch.int32)
1.3创建线性张量和随机张量
#### 1.3.1创建线性张量
torch.arange(start, end, 步长) torch.linspace(start, end, 个数)
1.3.2创建随机张量
torch.randn(行,列) torch.randint(start, end,size)
-
在指定区间按照步长生成元素 [start, end, step)
data = torch.arange(0, 10, 2) print(data)
1.3.3设置随机数种子
torch.manual_seed() torch.random.initial_seed()
# 1. 创建随机张量 data = torch.randn(2, 3) # 创建2行3列张量 print(data) # 查看随机数种子 print('随机数种子:', torch.random.initial_seed()) # 2. 随机数种子设置 torch.random.manual_seed(100) data = torch.randn(2, 3) print(data) print('随机数种子:', torch.random.initial_seed())
1.4创建0-1的张量
-
创建全0张量
# 1. 创建指定形状全0张量 data = torch.zeros(2, 3) print(data) # 2. 根据张量形状创建全0张量 data = torch.zeros_like(data) print(data)
-
创建全1张量
# 1. 创建指定形状全1张量 data = torch.ones(2, 3) print(data) # 2. 根据张量形状创建全1张量 data = torch.ones_like(data) print(data)
-
创建指定值的张量
# 1. 创建指定形状全1张量 data = torch.ones(2, 3) print(data) # 2. 根据张量形状创建全1张量 data = torch.ones_like(data) print(data)
1.4.1创建方式
直接创建,自己指定形状 根据已有的张量形状创建
1. 创建指定形状指定值的张量 data = torch.full([2, 3], 10) print(data) # 2. 根据张量形状创建指定值的张量 data = torch.full_like(data, 20) print(data)