笔记一
- PyTorch入门基础串讲
-
- PyTorch的基本概念
- Tensor与机器学习的关系
- Tensor的类型
- Tensor的创建
- Tensor的属性
- Tensor的算术运算
- in-place的概念和广播机制
- Tensor的取整/取余运算
- Tensor的比较运算/排序
- Tensor的三角函数
- Tensor中其他的数学函数
- Tensor中统计学相关的函数
- Tensor的``torch.distributions``
- Tensor中的随机抽样
- Tensor中的范数运算
- Tensor中的矩阵分解
- Tensor的裁剪运算
- Tensor的索引和数据筛选
- Tensor的组合/拼接
- Tensor的切片
- Tensor的变形操作
- Tensor的填充操作
- Tensor的频谱操作
- Pytorch简单编程技巧
- Variable & Autograd
- ``torch.nn``库
- visdom
- tensorboardX
- torchvision
PyTorch入门基础串讲
PyTorch的基本概念
Tensor
有时遇到的数据是很高维度的,很难使用矩阵或向量来描述,这时就用张量来描述任意维度的物体

Variable(autograd)
用变量来表达参数
nn.Module
封装了许多神经网络结构
Tensor与机器学习的关系
我们使用tensor来对样本和模型进行描述

Tensor的类型
Tensor的创建
Tensor创建编程实例
import torch
'''
几种特殊的tensor
'''
a = torch.Tensor([[1,2],[3,4]])
print(a)
print(a.type())
b = torch.Tensor(2,3) #定义一个2×3的二阶tensor
#使用shape来定义时,初始值为随机值
print(b)
print(b.type())
c = torch.ones(2,2)
print(c)
print(c.type())
d = torch.eye(2,2)
print(d)
print(d.type())
e = torch.zeros(2,2)
print(e)
print(e.type())
f = torch.zeros_like(b) #跟某个tensor相同shape的全0tensor
f = torch.ones_like(b)
print(f)
print(f.type())
print("+++++++++++++++++++++++++++++++++++++++++")
'''
随机
'''
a = torch.rand(2,2)
#随机生成某个shape的tensor
print(a)
print(a.type())
b = torch.normal(mean = 0.0, std = torch.rand(5))
#构造5组不同的高斯正态分布
#生成随机满足正态分布的值
print(b)
print(b.type())
c = torch.normal(mean = torch.rand(5), std = torch.rand(5))
#随机五组均值和标准差
print(c)
print(c.type())
d = torch.Tensor(2,2).uniform_(-1,1)
#定义均匀分布
#需要先指定tensor的大小,然后再定义(-1,1)之间的均匀分布
print(d)
print(d.type())
print("+++++++++++++++++++++++++++++++++++++++++")
'''
序列
'''
a = torch.arange(0,10,2)
#定义[0,10)中步长为2的序列
print(a)
print(a.type())
b = torch.linspace(2,10,3)#拿到等间隔的n个数字
#定义一个在[2,10]之间的3个数字的等间隔序列
print(b)
print(b.type())
c = torch.randperm(10)
#生成一个[0,10)的打乱序列
print(c)
print(c.type())
print("+++++++++++++++++++++++++++++++++++++++++")
###############对比
import numpy as np
a = np.array([[1,2],[3,4]])
print(a)
tensor与numpy很相似,就像是在numpy外面套了一层tensor
Tensor的属性
每一个Tensor有torch.dtype
、torch.device
、torch.layout
三种属性
torch.device
标识了torch.Tensor
对象在创建之后所存储在的设备名称(CPU/GPU(Cuda 0 1 2))
torch.layout
表示torch.Tensor
内存布局的对象(稠密的张量)【sparse张量以稀疏形式进行存储】
torch.tensor([1,2,3],dtype=torch.float32,device=torch.device('cpu'))
#定义稠密的张量
稀疏的张量
稀疏:描述了当前的数据中非零元素的个数
torch.sparse_coo_tensor
- coo类型表示了非零元素的坐标形式
indices = torch.tensor([[0,1,1],[2,0,2]]) # 非零元素的坐标值
values = torch.tensor([3,4,5],dtype=torch.float32)# 非零元素的值
x = torch.sparse_coo_tensor(indices,values,[2,4])#shape=2×4
import torch
dev = torch.device("cpu")#将tensor放置在cpu上计算
#dev = torch.device("cuda:0") #放置在第0块显卡上
a = torch.tensor([2,2],dtype=torch.float32,device = dev)
print(a)
#定义稀疏张量
i = torch.tensor([[0,1,2],[0,1,2]])
v = torch.tensor([1,2,3])
a = torch.sparse_coo_tensor(i,v,(4,4))
print(a)
a = torch.sparse_coo_tensor(i,v,(4,4)).to_dense()#转成稠密张量
print(a)
a = torch.sparse_coo_tensor(i,v,(4,4),dtype = torch.float32,device = dev)
print(a)
Tensor的算术运算
加法运算
c = a + b
c = torch.add(a,b)
a.add(b)
#带下划线的方式在计算的同时将a的值进行修改
a.add_(b)
减法运算
c = a - b
c = torch.sub(a,b)
a.sub(b)
a.sub_(b)
乘法运算
哈达玛积(element wise,对应元素相乘【维度相同】)
c = a * b
c = torch.mul(a,b)
a.mul(b)
a.mul_(b)
除法运算
c = a / b
c = torch.div(a,b)
a.div(b)
a.div_(b)
矩阵运算
二维矩阵乘法运算操作包括torch.mm()、torch.matmul()、@
矩阵维度首尾呼应
a