torch学习

张量

  • 张量类似于NumPy 的ndarray,不同之处在于张量可以在 GPU 或其他硬件加速器上运行
方法作用
torch.cat连接两个相同shape的tensor
tensor1@tensor2矩阵乘法
tensor1.matmul(tensor2)矩阵乘法
torch.matmul(tensor1, tensor2, out=tensor3)矩阵乘法
tensor1*tensor2对应位置的值直接相乘
tensor1.mul(tensor2)对应位置的值直接相乘
torch.mul(tensor1, tensor2, out=tensor3)对应位置的值直接相乘
.item()将张量数类型转为python(限单个数)
+、-、*、/、**对应位置的值直接相乘
.add_()就地操作
numpy_array= tensor.numpy()如果tensor改变,将改变numpy_array的值,反之不成立。尽管他们的对象类型不一样
tensor=torch.from_numpy(numpy_array)如果numpy_array改变,将改变tensor的值,反之不成立。尽管他们的对象类型不一样

注:tensor指的是具体的张量,

预处理数据和预加载数据集的工具包

torch.utils.data.DataLoader
torch.utils.data.Dataset

神经网络模块

方法含义参数
nn.Linear全连接层
nn.ReLU激活函数
nn.Flatten
nn.Sequntial有序的模块容器。数据按照定义的相同顺序通过所有模块。
nn.Softmax
model.named_parameters()自动跟踪模型对象中定义的所有字段

常见损失函数

方法含义参数主要用途
nn.MSELoss均方误差回归
nn.NLLLoss负对数似然函数分类
nn.CrossEntroyLoss交叉熵损失函数
nn.LogSoftmax

常见优化器

每个训练步骤中调整模型参数以减少模型误差的过程

torch.optim.+ 方法名中文名参数
ADAM
SGD随机梯度下降model.parameters(), lr
RMSProp

该对象的方法

  • zero_grad(): 重置模型参数的梯度
  • step(): 在向后传递中收集的梯度来调整参数

神经网络术语

epoch训练循环- 迭代训练数据集并尝试收敛到最佳参数。 验证/测试循环- 迭代测试数据集以检查模型性能是否正在提高
learning_rate在每个批次/时期更新模型参数的程度。
batch_size在更新参数之前通过网络传播的数据样本数量
loss损失函数
Optimizer优化器

保存和加载模型

1. 保存和加载模型权重

一定要model.eval()在推理之前调用方法以将 dropout 和批量归一化层设置为评估模式。不这样做会产生不一致的推理结果

  • 加载模型

    model.load_state_dict(torch.load('model_weights.pth'))
    model.eval()
    
  • 保存模型

    torch.save(model.state_dict(), 'model_weights.pth')
    

    2. 保存和加载模型类和权重

  • 加载

    torch.load(model, path)

  • 保存

    model.save(model, path)

数据计算

方法
torch.exp()
tensor.sum()
a+b广播机制
tensor.numel()
torch.exp()

双线性插值

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)

图像插值方法

nn.Upsample

nn.Upsample

其他Tips

  • 张量在给出其他部分后可以自动计算出一个维度。我们可以通过在希望张量自动推断的维度放置-1来调用此功能。在上面的例子中,我们可以用x.reshape(-1,4)x.reshape(3,-1)来取代

  • 对于文本,可以直接用 Python 或 Cython 基础数据加载模块,或者用 NLTK 和 SpaCy

待整理

  • 张量在给出其他部分后可以自动计算出一个维度。我们可以通过在希望张量自动推断的维度放置-1来调用此功能

    tensor.reshape(-1, 2)
    
  • torch.zeros((2, 3, 4))
    
  • torch.randn
    
  • torch.arange
    tensor.item()
    tensor.clone()
    tensor.numel()元素总数
    tensor.mean()
    tensor.sum(axis=1, keepdims=True)不降维进行求和
    torch.dot()矩阵点积
    torch.mv(A, x)矩阵向量积
    torch.mm() \ @矩阵乘法 (matrix)
    torch.norm(u)范数
    torch.detach()返回一个新的tensor,从当前计算图中分离下来。但是仍指向原变量的存放位置,不同之处只是requirse_grad为false.得到的这个tensir永远不需要计算器梯度,不具有grad.

    即使之后重新将它的requires_grad置为true,它也不会具有梯度grad.这样我们就会继续使用这个新的tensor进行计算,后面当我们进行反向传播时,到该调用detach()的tensor就会停止,不能再继续向前进行传播.

    注意:

    使用detach返回的tensor和原始的tensor共同一个内存,即一个修改另一个也会跟着改变
    tensor[tensor]一个张量的索引可以是另一个张量

transforms模块参考

参考2

  • Compose

    将多个transform组合起来使用。

  • CenterCrop(size)

    将给定的PIL.Image进行中心切割,得到给定的sizesize可以是tuple(target_height, target_width)size也可以是一个Integer,在这种情况下,切出来的图片的形状是正方形。

  • Normalize介绍

    Normalize()函数的作用是将数据转换为标准高斯分布,即逐个channel的对图像进行标准化(默认均值变为0 ,标准差为1),可以加快模型的收敛。

    经常看到的mean = [ 0.485 , 0.456 , 0.406 ], std = [ 0.229 , 0.224 , 0.225 ] 表示的是从数据集中随机抽样计算得到的。

  • np.transpose(npimg, (1, 2, 0)) 表示将图像的0-> 1轴交换,1->2轴交换, 2->0轴交换

torchVision

  • utils.make_grid make_grid的作用是将若干幅图像拼成一幅图像。其中padding的作用就是子图像与子图像之间的pad有多宽。

Viriable

详见

  • 与tensor的区别

viriable可以求梯度,tensor不能求梯度

训练

  • 将tensor 通过cuda加载到GPU\CPU中计算

    tensor.cuda()
    tensor.cpu()
    
  • 将网络迁移到GPU

    torch.device()
    net.to(device)
    

  • 1.0版本

    dataloader不是一个可迭代对象,需要iter()

torch.utils.data.DataLoader

迁移学习

实际中,基本没有人会从零开始(随机初始化)训练一个完整的卷积网络,因为相对于网络,很难得到一个足够大的数据集[网络很深, 需要足够大数据集]。通常的做法是在一个很大的数据集上进行预训练得到卷积网络ConvNet, 然后将这个ConvNet的参数作为目标任务的初始化参数或者固定这些参数。

常见操作

自定义卷积核进行卷积

c.weight.data = torch.Tensor([[[[1, 1, 1],
                                [1, 1, 0],
                                [0, 1, 1]]]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值