官方文档:https://pytorch.org/docs/
人工智能工具库(Anaconda/Pytorch/PyCharm等)安装环境配置视频教程
深度学习环境搭建(从卸载CUDA到安装,以及Pytorch与torchvision的安装)
【PyTorch】1.1 PyTorch简介和安装
重新创建并切换使用虚拟环境的步骤:
conda deactivate
conda create -n pytorch_1.7 python=3.6
conda activate pytorch_1.7
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ "torch-1.7.1+cu110-cp36-cp36m-win_amd64.whl"
pip install "torchvision-0.8.2+cu110-cp36-cp36m-win_amd64.whl"
张量是一个多维数组,它是标量、向量、矩阵的高维拓展
【PyTorch】1.2 张量简介
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导
参数说明:
data:被封装的Tensor
grad:data的梯度(偏导数)
grad_fn:创建Tensor的Function,是自动求导的关键,记录创建该张量时所用的方法(函数)
requires_grad:指示是否需要梯度
is_leaf:指示是否为叶子结点(张量)【用户创建的结点(张量)称为叶子结点(张量)】
PyTorch0.4.0版开始,Variable并入Tensor
参数说明:
【PyTorch】1.2 张量创建
常见三种创建方法:
直接创建
依据数值创建
依据概率分布创建
1 直接创建
1.1 torch.tensor()
功能:从data创建tensor
参数说明:
1.2 torch.from_numpy(ndarray)
功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动
2. 依据数值创建
2.1 torch.zeros()
参数说明:
2.2 torch.zeros_like()
参数说明:
2.3 torch.ones()
功能:根据size创建全1张量
参数说明:
2.4 torch.ones_like()
功能:根据input形状创建全1张量
参数说明:
2.5 torch.full()
功能:根据size创建自定义的数值张量
参数说明:
2.6 torch.full_like()
功能:根据input形状创建自定义的数值张量
2.7 torch.arange()
注意事项:数值区间为[start,end),即左闭右开
参数说明:
2.8 torch.linspace()
注意事项:长度为steps,数值区间为[start,end],即左闭右闭
参数说明:
2.9 torch.logspace()
功能:创建对数均分的1维张量
注意事项:长度为steps,底为base
参数说明:
2.10 torch.eye()
功能:创建单位对角矩阵(2维张量)
注意事项:默认为方阵
参数说明:
3 依据概率分布创建
3.1 torch.normal()
功能:生成正态分布(高斯分布)张量
参数说明:
四种模式:
3.2 torch.randn()
功能:根据size生成标准正态分布(高斯分布)张量
参数说明:
3.3 torch.randn_like()
功能:根据input形状生成标准正态分布(高斯分布)张量
3.4 torch.rand()
功能:在区间[0,1)上,根据size生成均匀分布张量
参数说明:
3.5 torch.rand_like()
功能:在区间[0,1)上,根据input形状生成均匀分布张量
3.6 torch.randint()
功能:在区间[low,high)上,根据size生成整数均匀分布张量
参数说明:
3.7 torch.randint_like()
功能:在区间[low,high)上,根据input形状生成整数均匀分布张量
3.8 torch.randperm()
功能:生成从0到n-1的随机排列张量
参数说明:
3.9 torch.bernoulli()
功能:以input为概率,生成伯努利分布(0-1分布/两点分布)张量
参数说明:
代码实现:
import numpy as np
import torch
# -------------------------------example 1------------------------------------
# 通过torch.tensor创建张量
flag=True
if flag:
arr1=np.ones((3,3))
print("ndarray的数据类型:",arr1.dtype)
t1=torch.tensor(arr1)
# t=torch.tensor(arr1,device="cuda") # 使用GPU
print(t1)
print("\n")
# -------------------------------example 2------------------------------------
# 通过torch.from_numpy创建张量
flag=True
if flag:
arr2=np.array([[1,2,3],[4,5,6]])
t2=torch.from_numpy(arr2)
# print("numpy array:",arr2)
# print("tensor:",t2)
# print("\n修改arr")
# arr2[0,0]=0
# print("numpy array:",arr2)
# print("tensor:",t2)
print("\n修改tensor")
arr2[0,0]=-1
print("numpy array:",arr2)
print("tensor:",t2)
print("\n")
# -------------------------------example 3------------------------------------
# 通过torch.zeros建张量
flag=True
if flag:
out_t=torch.tensor([1])
t3=torch.zeros((3,3),out=out_t)
print("t3:\n",t3)
print("out_t:\n",out_t)
print(id(t3),id(out_t),id(t3)==id(out_t))
print("\n")
# -------------------------------example 4------------------------------------
# 通过torch.full创建全1张量
flag=True
if flag:
t4=torch.full((3,3),fill_value=1)
print("t4:\n",t4)
print("\n")
# -------------------------------example 5------------------------------------
# 通过torch.arange创建等差数列张量
flag=True
if flag:
t5=torch.arange(2,10,2) # 步长为2,左闭右开
print("t5:\n",t5)
print("\n")
# -------------------------------example 6------------------------------------
# 通过torch.linspace创建均分数列张量
flag=True
if flag:
t6=torch.linspace(2,10,5) # 均分为5个数,左闭右闭
print("t6:\n",t6)
print("\n")
# -------------------------------example 7------------------------------------
# 通过torch.normal创建正态分布张量
flag=True
if flag:
# 模式1: mean:张量 std:张量
mean=torch.arange(1,5,dtype=torch.float)
std=torch.arange(1,5,dtype=torch.float)
t7=torch.normal(mean,std)
print("mean:{}\nstd:{}".format(mean,std))
print("t7:\n",t7)
print("\n")
# 模式2: mean:标量 std:标量
mean=0
std=1
t8=torch.normal(mean,std,size=(4,)) # mean和std都是标量时需设置size(张量的形状)
print("mean:{}\nstd:{}".format(mean,std))
print("t8:\n",t8)
print("\n")
# 模式3: mean:张量 std:标量
mean=torch.arange(1,5,dtype=torch.float)
std=1
t9=torch.normal(mean,std)
print("mean:{}\nstd:{}".format(mean,std))
print("t9:\n",t9)
print("\n")
# 模式4: mean:标量 std:张量
mean=0
std=torch.arange(1,5,dtype=torch.float)
t10=torch.normal(mean,std)
print("mean:{}\nstd:{}".format(mean,std))
print("t10:\n",t10)
【PyTorch】1.3 张量操作与线性回归
常见四种操作:
- 拼接
- 切分
- 索引
- 变换
拼接
切分
索引
变换
- 加减乘除
- 对数、指数、幂函数
- 三角函数
计算图是用来描述运算的有向无环图
【PyTorch】1.4 计算图
计算图有两个主要元素:结点(Node)
和边(Edge)
结点表示数据
,如向量、矩阵、张量
边表示运算
,如加减乘除卷积等
根据计算图搭建方式,可将计算图分为
动态图
和静态图
- 动态图:运算与搭建
同时
进行- 静态图:
先
搭建图,后
运算【PyTorch】1.4 动态图机制
【PyTorch】1.5 autograd与逻辑回归
torch.autograd.backward()
功能:自动求取梯度
参数说明:
torch.autograd.grad()
功能:自动求取梯度
参数说明:
autograd 注意事项
: