1. Tensor
pytorch 中数据类型Tensors
- 创建一个5*3矩阵,只分配空间,未初始化
x = torch.empty(5, 3)
或者x = torch.Tensor(5, 3)
- 0-1分布,全0,特定数值,全1Tensor
x = torch.rand(5, 3)0-1分布
x = torch.zeros(5, 3, dtype=torch.long)全0
x = torch.tensor([5.5, 3])
a = torch.ones(5)全1
x = torch.randn(3, 3)标准正态分布
- Tensor运算
tensor加法一
x+y
tensor加法二
torch.add(x,y)
tensor加法三
result = torch.Tensor(5,3)
torch.add(x,y,out=result)
y.add(x)不改变y的内容
y.add_(x)改变y的nei'r
查看tensor大小
可以使用与numpy相同的shape属性查看
print(x.shape)
也可以使用size()函数,返回的结果都是相同的
print(x.size())
零阶张量 (r = 0) 为标量 (Scalar),第一阶张量 (r = 1) 为向量 (Vector), 第二阶张量 (r = 2) 则成为矩阵 (Matrix),第三阶以上的统称为多维张量。
对于标量,我们可以直接使用 .item() 从中取出其对应的python对象的数值
_, predicted = torch.max(outputs, 1)
torch.max()
torch.max(input) → Tensor
返回输入tensor中所有元素的最大值
torch.max(input, dim)
按维度dim 返回最大值
torch.max)(a,0) 返回每一列中最大值的那个元素,且返回索引(返回最大元素在这一列的行索引
torch.max(a,1) 返回每一行中最大值的那个元素,且返回其索引(返回最大元素在这一行的列索引)
所以,_代表的是outputs按行计算的最大值,predicted代表的是索引。
sum_x = torch.sum(x, dim=1)
沿着tensor x的每行求和
2.Autograd: 自动求导机制
设置.requires_grad 为 True,那么将会追踪所有对于该张量的操作。 当完成计算后通过调用 .backward(),自动计算所有的梯度, 这个张量的所有梯度将会自动积累到 .grad 属性。
Tensor 和 Function互相连接并生成一个非循环图,它表示和存储了完整的计算历史。 每个张量都有一个.grad_fn属性,这个属性指向一个Function对象,用来反向传播计算输入的梯度。
使用with torch.no_grad()
禁止已经设置requires_grad=True的向量进行自动求导,这个方法在测试集测试准确率的时候回经常用到,
3.神经网络包nn和优化器optm
torch.nn是专门为神经网络设计的模块化接口。
torch.nn.functional 这个包中包含了神经网络中使用的一些常用函数
PyTorch中已经为我们准备好了现成的网络模型,只要继承nn.Module,并实现它的forward方法,PyTorch会根据autograd,自动实现backward函数,
4.数据的加载和预处理
Dataset
Dataset是一个抽象类, 为了能够方便的读取,需要将要使用的数据包装为Dataset类。
Datalorder
DataLoader为我们提供了对Dataset的读取操作,常用参数有:batch_size(每个batch的大小), shuffle(是否进行shuffle操作), num_workers(加载数据的时候使用几个子进程)
torchvision 包
torchvision 是PyTorch中专门用来处理图像的库,
torchvision.datasets 可以理解为PyTorch团队自定义的dataset,这些dataset帮我们提前处理好了很多的图片数据集,我们拿来就可以直接使用:
torchvision.models
torchvision不仅提供了常用图片数据集,还提供了训练好的模型,可以加载之后,直接使用,或者在进行迁移学习
torchvision.transforms
transforms 模块提供了一般的图像转换操作类,用作数据的处理和增广
5.损失函数(Loss Function)
损失函数(loss function)是用来估量模型的预测值与真实值的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。
nn.L1Loss:
输入x和目标y之间差的绝对值,
nn.NLLLoss:
用于多分类的负对数似然损失函数
nn.MSELoss:
均方损失函数 ,输入x和目标y之间均方差
nn.CrossEntropyLoss:
多分类用的交叉熵损失函数,一般多分类的情况会使用这个损失函数
nn.BCELoss:
计算 x 与 y 之间的二进制交叉熵。
6.梯度下降
torch.optim.SGD
随机梯度下降算法
torch.optim.RMSprop
RMSprop(root mean square prop)也是一种可以加快梯度下降的算法
torch.optim.Adam
Adam 优化算法的基本思想就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法
7.激活函数
sigmod 函数
tanh 函数
ReLU 函数
Leaky Relu 函数
ReLU目前仍是最常用的activation function,在隐藏层中推荐优先尝试!