一.前言
本节我们先来介绍一下pytorch以及一些小知识
世界科技巨头公司的特点分析
公司 | 核心特点 | 关键技术贡献 |
---|---|---|
Google | 持续开源+论文驱动,搜索霸主地位 | - 2003 Hadoop(大数据) - 2014 TensorFlow(AI框架) - 2017 Transformer - 2018 BERT |
Meta | 工具导向型创新,低调但实用 | - Hive(大数据) - FastText(NLP) - PyTorch(动态图框架) |
微软 | 传统IT巨头转型成功,通过投资逆袭 | - 投资OpenAI实现AI时代逆转 |
BATB | 中国科技企业快速追赶,AI领域差距缩小 | - 百度(PaddlePaddle)、阿里、腾讯、字节跳动 |
补充说明:
- Google的"被OpenAI压制"主要指2023年后在生成式AI领域的竞争态势。
- Meta的PyTorch已成为学术界主流(2024年arXiv论文占比超80%)。
主流深度学习框架对比
框架 | 特点 | 版本演进 | 适用场景 |
---|---|---|---|
TensorFlow | 静态图→动态图转型,企业级支持强 | 1.x(已淘汰)→ 2.x(主流) | 工业部署、移动端 |
PyTorch | 动态图设计,开发者友好 | 1.3-1.10(稳定)→ 2.1+(新特性) | 学术研究、快速原型开发 |
PaddlePaddle | 中文文档完善,与PyTorch高度兼容 | 兼容PyTorch API | 国内工业场景 |
Caffe | 专注CV,配置复杂 | 已逐渐边缘化 | 学术研究(历史项目) |
关键结论:
- PyTorch已成为GitHub星标数最多的框架(2024年超60k stars)。
- PaddlePaddle迁移成本极低,适合中文开发者。
Python深度学习环境配置指南
推荐流程:
-
安装Anaconda
# 下载后直接运行安装包(默认勾选添加PATH)
-
创建虚拟环境
conda create -n dl_env python=3.10 # 推荐3.10+版本
-
环境管理
conda activate dl_env # 激活 conda deactivate # 退出
-
包安装技巧
-
优先使用
conda install
解决依赖冲突 -
示例:
pip install torch==2.3.0 --extra-index-url https://download.pytorch.org/whl/cu118 # 指定CUDA版本
-
避坑提示:
- 避免混用
conda
和pip
安装同一包 - 虚拟环境与VMware无关(纯Python隔离)
PyTorch数据精度详解
默认规则:
数据类型 | 默认值 | 显式声明示例 |
---|---|---|
整型 | torch.int64 |
tensor = torch.tensor([1,2], dtype=torch.int32) |
浮点型 | torch.float32 |
tensor = torch.tensor([1.0,2.0], dtype=torch.float16) |
精度选择建议:
- 训练阶段 :必须使用
float32
(数值稳定性) - 推理部署 :可尝试
float16
/int8
(节省显存) - 特殊场景 :
int64
用于索引/标签
计算机随机数本质
技术原理:
import random
random.seed(42) # 设置种子可复现"随机"结果
print(random.random()) # 伪随机数生成
关键特性:
- 确定性算法:基于梅森旋转算法等数学公式
- 种子依赖:相同种子→相同随机序列
- 应用场景 :
- 游戏/模拟(可复现性重要)
- 加密领域禁用伪随机数(需硬件熵源)
扩展知识:
- 真随机数需依赖物理现象(如放射性衰变、热噪声)
- Linux系统通过
/dev/random
采集硬件熵
以上内容已整合技术细节与行业现状,如需进一步探讨某个方向(如PyTorch 2.x新特性或框架性能对比),可提供更深入的分析。
PyTorch 是⼀个 Python 深度学习框架,它将数据封装成张量(Tensor)来进⾏运算。PyTorch 中的张量就 是元素为同⼀种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的⼀些运算、 处理的⽅法被封装在类中。
二.张量的基本创建
-
torch.tensor 根据指定数据创建张量
-
torch.Tensor 根据形状创建张量, 其也可⽤来创建指定数据的张量
-
torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量
python
import torch
import numpy as np
import random
# 1. 根据已有数据创建张量
def test01():
# 1. 创建张量标量
data = torch.tensor(10)
print(data)
# 2. numpy 数组, 由于 data 为 float64, 下⾯代码也使⽤该类型
data = np.random.randn(2, 3)
data = torch.tensor(data)
print(data)
# 3. 列表, 下⾯代码使⽤默认元素类型 float32
data = [[10., 20., 30.], [40., 50., 60.]]
data = torch.tensor(data)
print(data)
# 2. 创建指定形状的张量
def test02():
# 1. 创建2⾏3列的张量, 默认 dtype 为 float32
data = torch.Tensor(2, 3)
print(data)
# 2. 注意: 如果传递列表, 则创建包含指定元素的张量
data = torch.Tensor([10])
print(data)
data = torch.Tensor([10, 20])
print(data)
# 3. 使⽤具体类型的张量
def test03():
# 1. 创建2⾏3列, dtype 为 int32 的张量
data = torch.IntTensor(2, 3)
print(data)
# 2. 注意: 如果传递的元素类型不正确, 则会进⾏类型转换
data = torch.IntTensor([2.5, 3.3])
print(data)
# 3. 其他的类型
data = torch.ShortTensor() # int16
data = torch.LongTensor()
# int64
data = torch.FloatTensor() # float32
data = torch.DoubleTensor() # float64
if __name__ == '__main__':
test02()
三.创建线性和随机张量
-
torch.arange 和 torch.linspace 创建线性张量
-
torch.random.init_seed 和 torch.random.manual_seed 随机种⼦设置
-
torch.randn 创建随机张量
python
import torch
# 1. 创建线性空间的张量
def test01():
# 1. 在指定区间按照步⻓⽣成元素 [start, end, step)
data = torch.arange(0, 10, 2)
print(data)
# 2. 在指定区间按照元素个数⽣成
data = torch.linspace(0, 11, 10)
print(data)
# 2. 创建随机张量
def test02():
# 1. 创建随机张量
data = torch.randn(2, 3) # 创建2⾏3列张量
print(data)
# 2. 随机数种⼦设置
print('随机数种⼦:', torch.random.initial_seed())
torch.random.manual_seed(100)
print('随机数种⼦:', torch.random.initial_seed())
if __name__ == '__main__':
test02()
四.创建01张量
-
torch.ones 和 torch.ones_like 创建全1张量
-
torch.zeros 和 torch.zeros_like 创建全0张量
-
torch.full 和 torch.full_like 创建全为指定值张量
python
import torch
# 1. 创建全0张量
def test01():
# 1. 创建指定形状全0张量
data = torch.zeros(2, 3)
print(data)
# 2. 根据张量形状创建全0张量
data = torch.zeros_like(data)
print(data)
# 2. 创建全1张量
def test02():
# 1. 创建指定形状全0张量
data = torch.ones(2, 3)
print(data)
# 2. 根据张量形状创建全0张量
data = torch.ones_like(data)
print(data)
# 3. 创建全为指定值的张量
def test03():
# 1. 创建指定形状指定值的张量
data = torch.full([2, 3], 10)
print(data)
# 2. 根据张量形状创建指定值的张量
data = torch.full_like(data, 20)
print(data)
if __name__ == '__main__':
test01()
test02()
test03()
五.张量元素类型转换
-
tensor.type(torch.DoubleTensor)
-
torch.double()
python
import torch
def test():
data = torch.full([2, 3], 10)
print(data.dtype)
# 将 data 元素类型转换为 float64 类型
# 1. 第⼀种⽅法
data = data.type(torch.DoubleTensor)
print(data.dtype)
# 转换为其他类型
# data = data.type(torch.ShortTensor)
# data = data.type(torch.IntTensor)
# data = data.type(torch.LongTensor)
# data = data.type(torch.FloatTensor)
# 2. 第⼆种⽅法
data = data.double()
print(data.dtype)
# 转换为其他类型
# data = data.short()
# data = data.int()
# data = data.long()
# data = data.float()
if __name__ == '__main__':
test()
六.总结
在本⼩节中,我们主要学习了以下内容:
-
创建张量的⽅式
-
torch.tensor 根据指定数据创建张量
-
torch.Tensor 根据形状创建张量, 其也可⽤来创建指定数据的张量
-
torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量
-
创建线性和随机张量
-
torch.arange 和 torch.linspace 创建线性张量
-
torch.random.init_seed 和 torch.random.manual_seed 随机种⼦设置
-
torch.randn 创建随机张量
-
创建01张量
-
torch.ones 和 torch.ones_like 创建全1张量
-
torch.zeros 和 torch.zeros_like 创建全0张量
-
torch.full 和 torch.full_like 创建全为指定值张量
-
张量元素类型转换
-
tensor.type(torch.DoubleTensor)
-
torch.double()