如有侵权或其他问题,欢迎留言联系更正或删除。
python 是编程语言,pycharm 是集成开发环境IDE,anaconda 是python包的管理工具
coding 环境优劣比较:
1)pycharm:优势:适用于大型项目,代码文件传递方便;劣势:需从头整体运行代码;
2)pycharm 命令行:优势:详细显示各变量属性,可运行任意行;劣势:不便于代码阅读修改;
3)jupyter:优势:便于代码修改、阅读,可运行任意行;劣势:需配置相应环境。
1. 张量(Tensor)概念
pytorch框架内的基础元素
张量:多维数组,它是标量(0维)、向量(1维)、矩阵(2维)的高维拓展
2. torch.tensor ( ) 方法
data : 数据,如:list、tuple、ndarray
grad : data 的梯度
grad_fn : 创建 Tensor 的 Function,是自动求导的关键
requires_grad : 指示是否需要梯度
is_leaf : 指示是否位叶子结点(张量)
dtype : 张量的数据类型,如:torch.FloatTensor、torch.cuda.FloatTensor
shape : 张量的形状,如:( 64, 3, 224, 224 )
device : 张量所在设备,GPU/CPU,是加速的关键
3. 创建tensor
直接创建
torch.tensor ( ):
torch.tensor( data, dtype=None, device=None, requires_grad=False, pin_memory=False)torch.from_numpy (ndarray):
从 torch.from_numpy ( ) 创建的 tensor 与原 ndarray 共享内存,当修改其中一个的数据,另一个也将会被改动;
例题:写出下列代码的运行结果:(考察:共享内存)
import torch import numpy as np r = np.ones((3,3)) e = torch.from_numpy(r) r[0,2] = 9 print(e) e[2,2] = 7 print(r)运行结果:
依据数值建立
torch.ones ( )、torch.zeros ( )、torch.full ( )
torch.ones_like ( )、torch.zeros_like ( )、torch.full_like ( )
依据概率分布建立
4. 张量操作
拼接与切分
1)torch.cat ( ) 功能:将张量按维度 dim 进行拼接
tensors : 张量序列、dim : 待拼接的维度
torch.cat(tensors,dim=0,out=None)2)torch.stack ( ) 功能:在新创建的维度 dim 上进行堆积
tensors : 张量序列、dim : 待拼接的维度
torch.stack(tensors,dim=0,out=None)注意区别:
torch.cat ( ) 不会使张量维度数量增加,仅改变具体维度值;而 torch.stack ( ) 会使维度数量增加
torch.cat ( )、torch.stack ( ) 中输入的 tensors 维度需一致
3)torch.chunk ( ) 功能:将张量按维度dim进行平均切分
返回值:张量列表
注意事项:若不能整除,最后一份张量小于其他张量
input : 待切分的张量、chunks : 待切分的份数、dim : 待切分的维度
torch.chunk(input,chunks,dim=0)4)torch.split ( ) 功能:将张量按维度 dim 进行切分
返回值:张量列表
tensor :待切分的张量、dim : 待切分的维度
split_size_or_sections :为 int 时,表示每一份的长度;为 list 时,按 list 元素切分
torch.split(tensor,split_size_or_sections,dim=0)张量索引
torch.masked_select ( ) 功能:按 mask 中的 True 进行索引
返回值:一维张量
input : 待索引的张量、mask : 与 input 同形状的布尔型张量
torch.masked_select(input,mask,out=None)张量变幻
1)torch.reshape ( ) 功能:变换张量形状
注意事项:当张量在内存中是连续时,新张量与 input 共享数据内存
input : 待变换的张量、shape : 新张量的形状(shape内 "-1" 项:机器自行运算设置)
torch.reshape(input,shape)2)torch.transpose ( ) 功能:交换张量的两个维度
input : 待变换的张量、dim0 : 待交换的维度、dim1 : 待交换的维度
torch.transpose(input,dim0,dim1)3)torch.t ( ) 功能:2维张量转置,对矩阵而言,等价于:torch.transpose (input, 0, 1)
torch.t(input)4)torch.squeeze ( )、torch.unsqueeze ( )
torch.squeeze()
作用:对张量进行「降维」,去掉那些尺寸为 1 的维度
dim 参数:不传时默认清除所有长度为 1 的轴;指定某一维度时,仅当该维度长度确实为 1 才会被移除,否则保持不变
torch.unsqueeze()
作用:对张量进行「升维」,在指定位置插入一个长度为 1 的新维度
dim 参数:用来指定新维度插入的位置索引
对应代码:
torch.squeeze(input, dim=None, out=None) torch.unsqueeze(input, dim, out=None)张量数学运算
# 四则运算 torch.add() torch.addcdiv() torch.addcmul() torch.sub() torch.div() torch.mul() # 对数/指数 torch.log(input, out=None) torch.log10(input, out=None) torch.log2(input, out=None) torch.exp(input, out=None) torch.pow() # 三角函数/绝对值 torch.abs(input, out=None) torch.acos(input, out=None) torch.cosh(input, out=None) torch.cos(input, out=None) torch.asin(input, out=None) torch.atan(input, out=None) torch.atan2(input, other, out=None)tip:
1)张量可直接与常数运算;2)形状(tensor.shape)一致的张量可直接相加;
3)张量相乘(广播机制)