Pytorch笔记1

发布于:2024-07-27 ⋅ 阅读:(120) ⋅ 点赞:(0)

建议点赞收藏关注!持续更新至pytorch大部分内容更完。

整体框架如下

gpu加速

打开jupyter lab,打开一个file,右上角选择kernel为torchgpuprivate
要在 Mac M1的GPU 上运行 PyTorch 代码,使用命令 torch.device(“mps”)来指定。
在这里插入图片描述
在这里插入图片描述
之后就只需要引用gpu_a,gpu_b,其他与cpu_a…的操作没有区别。

数据

数据结构

张量Tensor

  1. ==数组概念,1…n维
  2. 有8个属性
    data
    dtype:有很多数据类型
    shape : 如 (6,6,6,6)
    device:所在设备cpu/gpu
    grad:data的梯度
    grad_fn:创建tensor 的function,是自动求导的关键,加法还是乘法
    requires_grad:指示是否需要梯度,不一定所有的张量都需要设置梯度
    is_leaf:指示是否是叶子节点(张量),计算图中再介绍。
  3. api
device=torch.device("mps")
torch.tensor(
			data, #list or numpy
			dtype=None, # 默认==data的类型
			device=None,
			requires_grad=False,
			pin_memory=False # 是否存于锁页内存 一般默认
			)

#创建
arr=np.ones((3,3))
t=torch.tensor(arr,device=device) 
# t.dtype == arr.dtype==float64

torch.from_numpy(ndarray) #从numpy创建tensor
#从torch.from_numpy创建的tensor与原来的ndarray共享内存,一改跟着改

torch.zeros(*size,#形状 如(3,3)
			out=None,#输出的张量 相当于赋值
			dtype=None,#内存中的布局形式
			layout=torch.strided,#通常默认,除非稀疏矩阵 用sparse_coo
			device=None,
			requires_grad=False)
torch.zeros_like(input,#根据Input的形状创建
				dtype=None,
				layout=None,
				device=None,
				requires_grad=False)

zeros 换成 ones

torch.full(size,#(3,3)
		   fill_value,#张量的值 如10
		   out=None,
		   dtype=None,
		   layout=torch.strided,
		   device=None,
		   requires_grad=False)

torch.arange(start=0, #创建等差1维张量
			end, #左闭右开
			step=1,#公差 默认1
			out=None,
		   dtype=None,
		   layout=torch.strided,
		   device=None,
		   requires_grad=False)

torch.linspace(start=0, #创建均分1维张量
			end, #左闭右闭
			steps=1,#数列长度
			#步长=(end-start)/step -1
			out=None,
		   dtype=None,
		   layout=torch.strided,
		   device=None,
		   requires_grad=False)

torch.logspace(base=...底默认10,...) #对数均分

torch.eye(n,#行数  #默认方阵
		  m,#列数
		  ...
		) #创建单位对角矩阵,2维张量,

torch.normal(mean,std,out=None)
#正态分布,mean均值,std方差
#mean std都可以分别是标量 or张量

#都是张量的情况的normal如何计算?
mean=[1,2,3,4]
std=[1,2,3,4]
t_normal=torch.normal(mean,std) #得到[1.66,2.53,3.18,6.48]
#1.66是通过mean=1,std=1的正态分布采样得到

torch.randn(*size, #标准正态分布  
			out=None,
			dtype=None,
			layout=torch.strided,
			device=None,
		   requires_grad=False)
torch.randn_like()

torch.randint(low=0, #均匀分布 前闭后开
			high,
			size, 
			out=None,
			dtype=None,
			layout=torch.strided,
			device=None,
		   requires_grad=False) 

torch.randint_like()

torch.randperm(n,#张量长度
			out=None,
			dtype=None,
			layout=torch.strided,
			device=None,
		   requires_grad=False) 
#生成0-n-1随机排列

torch.bernoulli(input,
				*,
				generator=None,
				out=None)
 #以input为概率,生成伯努利分布,即0-1分布,两点分布



Variable

已经合并到tensor 但是对于理解张量有帮助。variable是torch.autograd中的数据类型,用于封装tensor进行自动求导,有五个属性
data:被包装的tensor
grad:data的梯度
grad_fn:创建tensor 的function,是自动求导的关键,加法还是乘法
requires_grad:指示是否需要梯度,不一定所有的张量都需要设置梯度
is_leaf:指示是否是叶子节点(张量),计算图中再介绍。

预处理

数据增强

模型

构建模块

组织复杂网络

初始化网络参数

定义网络层

损失函数

创建损失函数

设置损失函数超参数

选择损失函数

优化器

管理模型参数

管理多个参数组实现不同学习率

调整学习率

迭代训练

观察训练效果

绘制loss/accuracy曲线

用TensorBoard分析

模型应用

图像分类

图像分割

目标检测

对抗生成

循环网络


网站公告

今日签到

点亮在社区的每一天
去签到