1、虚拟环境相关命令
- 创建虚拟环境
conda create --name env_name
conda create --name env_name python=3.5 #创建指定python版本
- 激活/使用/进入某个虚拟环境
conda activate env_name
- 退出当前环境
deactivate
- 复制某个虚拟环境
conda create --name new_env_name --clon old_env_name
- 删除某个环境
conda remove --name env_name --all
- 查看当前所用环境
conda info --envs 或者 conda env list
- 安装或卸载包(进入虚拟环境之后)
conda install xxx
conda install xxx=版本号 #指定版本号
conda install xxx -i 源名称或链接 #指定下载源
conda uninstall xxx
2、基础语法
1.pytorch的tensor与numpy
定义numpy的二维数组:
a = np.array([[1,2],[3,4]])
定义二维数组张量:
b = torch.tension([[1,2],[3,4]])
tension张量转为numpy数组:
c = b.numpy()
numpy 数组转换为tensor:
d = torch.from_numpy(c)
2.创建pytorch的tensor
第一种:用numpy/list 初始化创建
用numpy初始化创建
b=torch.from_numpy(a)
用list初始化创建
c = torch.tensor([2.,1.2])
d = torch.tensor([[1,2],[3,4]])
第二种:未初始化 创建
e = torch.empty(1)
f = torch.Tensor(2,3)
第三种:随机生成 创建
g = torch.rand(3,3)
h = torch.randn(3,3)
i = torch.randn_like(g)
第四种:序列生成 创建
j =torch.arange(0,10)
k = torch.arange(0,10,2)
l = torch.linspace(0,10,steps=3)
第五种: 全零 、全一、 单位矩阵、 创建
m = torch.ones(3,3)
n = orch.zeros(2,3)
o = torch.eye(4,4)
3.查看tensor属性
a=torch.tensor([[1,2,3],[2,3,4]],dtype=torch.float)
a.dtype #tensor类型
a.shape #tensor形状
a.size(e) #tensor第1维的大小
a.size(1) #tensor第2维的大小 print(a.dim()) #tensor维度大小
a.grad) # tensor梯度
a.device) #tensor 所在设备
4.tensor变形
a=torch.tensor([[1,2,3[4,5,6]],dtype=torch.float)
"a的值:a
a的形状:a.shape
b = a.flatten() #拉平,就成1维tensor
b的值:b
b的形状:,b.shape
c= b.reshape(2,3) #采用reshape将输入张量形状变为(1,6)
c的值:c
c的形状:c.shape
d = b.view(1,6) # 采用view将输入张量形状变为(1,6)
d的值:d
print("d的形状:",d.shape)
e = torch.squeeze(d) #将输入张量形状中的1去除
e的值e
e的形状:e.shape
5.tensor索引与切片
索引:tensor所有元素都有编号,正索引数是从左往右,从开始;负引从右往左,从一十开始
a=torch.tensorL[12,3].[4,5,6],[7,8,9]],dtype:torch.float) b=torch.tensor(CC10,10,10],[10,)0,10], [10,10,10]].dtype=torchfl0at)
a[1,2] 第2行第3列的值
a[-1,-1] 第3行第3列的值
a[[1],[0,2]] 第2行中第1列和第3列的值
a>4 大于4.返回布尔类型
aca>4] 大于4的值
torch. wherela>s,a,b) 大于5输出a的值,否则输出b切片:提取tensor中某一范围内的元素
a[:,o] 第1列
a[:,-1] 第3列
a[:0:2] 第1列和第2列
a[0,:] 第1行
a[-1,:] 第3行
a[::2,::2] 步长,取行时空2个、取列时空2个
6.tensor连接和拆分
a=torch.tensor([[1,2,3][4,5,6][7,8,9]],dtype=torch.float)
b = torch.tensor([[10,10,10] [10,10,10][10,10,10]],dtype=torch.float)
在给定维度上对输入的张量进行连接操作:
a,b按行拼接:torch.cat((a,b),dim=0)
a,b按列拼接:torch.cat((a,b),dim=1)
沿着一个新维度对输入张量序列进行连接 在新维度拼接张量 将原始数据维度扩展一维:
torch.stack((a,b),dim=0))
a,b按行拼接:torch.stack((a,b),dim=0).shape
a,b按列拼接:torch.stack((a,b),dim=1)
a,b按列拼接:torch.stack((a,b),dim=1).shape
按块大小拆分张量 除不尽的取余数 返回一个元组:
torch.split(a,2,dim = 0)
torch.split(a,1,dim.=0)
torch.split(a,1,dim = 1)
torch.chunk(a,2,dim = 0)
按块数拆分张量:
torch.chunk(a,2,dim =1)
7、换位与置换
a=torch.tensor([[1,2,3][4,5,6][7,8,9]],dtype=torch.float)
只接收二维Tensor:
a.T
torch.t(a)
torch.transpose(a,1 0)
接收多维Tensor:
a.permute(1,0)
三维的:
c=torch.unsqueeze(a,0)
c.shape
c.permute(1,0l2).shape
8、Tensor 运算:
加法:可以使用 + 运算符或 torch.add() 等函数进行张量相加。
减法:可使用 - 或 torch.sub() 等。
对应元素相乘用 * 。
除法:通过 / 或 torch.div() 等操作。
对于维度大于 2 的张量(高维张量),矩阵乘法仅作用在最后两个维度上,前面的维度必须保持一致,且只能通过 torch.matmul() 操作。
9.tensor微分计算:
标量对向量求导:
x= torch.tensor([1.0,2.0,3.0,4.0,5.0],requires_grad=True,dtype=torch.float32)
print(x.requires_grad) #输出 True
print(x.grad)print(x.grad_fn) # tensor.grad输出张量的梯度,这里输出 None,因为目前 t 没有梯度
print(x.grad_fn) # tensor.grad_fn指向运算生成此张量的方法,这里为 None
y= torch.sum(x ** 2) #是岭标量,只是一个数值的tensor
y.backward() # 利用自动微分计算微分