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.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 ( )
张量数学运算
tip:
1)张量可直接与常数运算;2)形状(tensor.shape)一致的张量可直接相加;
3)张量相乘(广播机制)