Pytorch的自学之路

Tensor张量 多维数组

  • 介绍张量的属性
torch.tensor(
data='list/numpy',
dtype='torch.FloatTensor',
grad='梯度',
shape='张量的形状',
grad_fn='创建Tensor所需要的函数,求导的关键',
requires_grad='是否需要grad',
is_leaf='是否叶子结点 也是张量',
pin_memory='是否存于锁业内存',
device='CPU/CUDA')
  • 介绍张量的创建
#first create
arr=np.ones((5,5))
torch.tensor(arr,dtype='torch.FloatTensor',device='CPU/CUDA')
#second create
torch.from_numpy(np.array([[1,2,3],[1,2,3]]))
#third create
torch.zeros((5,5),out=torch.tensor([1]))
torch.ones_like((3,3))
torch.full((3,3),2)
torch.arrange(2,10,2)#等差,开始结束以及公差
torch.linspace(2,10,5)#均分,开始结束个数
torch.logspace(2,10,3,10)#均分对数开始结束个数和对数的底
torch.eye(3,3)#单位对角矩阵行列
torch.zeros(size='形状'
out='输出张量'
layout='内存的布局形式 strided,sparse_coo 等。当是稀疏矩阵时,设置为 sparse_coo 可以减少内存占用。')
id(torch.zeros((5,5),out=torch.tensor([1]))) #取内存地址out=t
#概率创建
torch.normal(),randn(),randint_like(),randperm(),bernoulli()#高斯正态随机整数伯努利
  • 张量的操作
#拼接
torch.cat(dim='维度0、1')
torch.stack(dim='维度')#接着上次的拼接
#切分
torch.chunk(chunks='切分的份数',dim='维度')
torch.split()
#索引拼接和切分
torch.index_select(input, dim, index, out=None)
torch.masked_select(input, mask, out=None)
#变换
torch.reshape(input, shape)
  • 练习–线性回归y=ax+b
    1.随机生成200个x,对应有200个y=5x+2
    2.预测的pre_y=ax+b
    3.loss=((y-pre_y)**2).mean()
    4.a/b=a/b-a/b.grad*study_rate
    a/b.grad.data.zero_()
import torch
import matplotlib.pyplot as plt
learning_rate=0.05
x=torch.rand([200])
y=5*x+2

a=torch.rand(1,requires_grad=True)
b=torch.rand(1,requires_grad=True)

for i in range(300):
	y_pre=torch.add(torch.mul(a,x),b)
	loss = ((y - y_pre) ** 2).mean()
	loss.backward()
	
	a.data -= learning_rate*a.grad.data
    b.data -= learning_rate * b.grad.data
	a.grad.zero_()
    b.grad.zero_()
plt.scatter(x.data.numpy(),y.data.numpy())
plt.plot(x.data.numpy(),y_pre.data.numpy())
plt.show()

在这里插入图片描述

  • 自动求导
    torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None)
    tensors: 用于求导的张量,如 loss
    retain_graph: 保存计算图。PyTorch 采用动态图机制,默认每次反向传播之后都会释放计算图。这里设置为 True 可以不释放计算图。后续二次求导
    create_graph: 创建导数计算图,用于高阶求导
    grad_tensors: 多梯度权重。当有多个 loss 混合需要计算梯度时,设置每个 loss 的权重。
  • 求取梯度
    torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)
    outputs: 用于求导的张量,如 loss
    inputs: 需要梯度的张量
    create_graph: 创建导数计算图,用于高阶求导
    retain_graph:保存计算图
    grad_outputs: 多梯度权重计算
  • 逻辑回归 sigmoid 函数,也被称为 Logistic 函数
    -f(z)= 1/(1+e.pow(-Z)) z=WX+b

PyTorch 的五大模块:数据、模型、损失函数、优化器和迭代训练。

  1. 数据收集:样本和标签。
    数据划分:训练集、验证集和测试集
    数据读取:对应于 PyTorch 的 DataLoader。其中 DataLoader 包括 Sampler 和 DataSet。Sampler 的功能是生成索引, DataSet 是根据生成的索引读取样本以及标签。
    数据预处理:对应于 PyTorch 的 transforms
torch.utils.data.DataLoader(dataset决定数据从哪里读取以及如何读取, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值