PyTorch笔记(一):PyTorch入门

What is PyTorch?

What is PyTorch?

  1. torch.Size本质上还是tuple,所以支持tuple的一切操作。
  2. 任何一个in-place改变张量的操作后面都固定一个_。例如x.copy_(y)、x.t_()将更改x。
  3. 也可以使用像标准的NumPy一样的各种索引操作。
  4. 改变形状:如果想改变形状,可以使用torch.view。
  5. 如果是仅包含一个元素的tensor,可以使用.item()来得到对应的python数值。
  6. 将torch的Tensor转化为NumPy数组,反之亦容易。
    将一个Torch张量转换为一个NumPy数组是轻而易举的事情,反之亦然。
    Torch张量和NumPy数组将共享它们的底层内存位置,因此当一个改变时,另外也会改变。

Autograd:自动求导

Autograd:自动求导

PyTorch中,所有神经网络的核心是 autograd 包,autograd 包为张量上的所有操作提供了自动求导机制。

  1. torch.Tensor 是这个包的核心类。
  2. 还有一个类对于autograd的实现非常重要:Function。
  3. Tensor 和 Function 互相连接生成了一个无圈图(acyclic graph),它编码了完整的计算历史。

神经网络

定义网络

  1. 使用torch.nn包来构建神经网络。
  2. nn包则依赖于autograd包来定义模型并对它们求导。
  3. nn.Module包含各个层和一个forward(input)方法,该方法返回output。
  4. 我们只需要定义 forward 函数,backward函数会在使用autograd时自动定义,backward函数用来计算导数。我们可以在 forward 函数中使用任何针对张量的操作和计算。
  5. torch.nn只支持小批量处理(mini-batches)。整个torch.nn包只支持小批量样本的输入,不支持单个样本的输入。
    比如,nn.Conv2d 接受一个4维的张量,即nSamples x nChannels x Height x Width。
    如果是一个单独的样本,只需要使用input.unsqueeze(0)来添加一个“假的”批大小维度。
  6. 一个模型的可学习参数可以通过net.parameters()返回。

计算损失

  1. 一个损失函数接受一对(output, target)作为输入,计算一个值来估计网络的输出和目标值相差多少。
  2. 调用loss.backward(),整张图开始关于loss微分。

反向传播

  1. 调用loss.backward()来反向传播误差。我们需要清零现有的梯度,否则梯度将会与已有的梯度累加。

更新权重

  1. 构建了一个较小的包torch.optim,它实现了所有的这些方法:SGD、Nesterov-SGD、Adam、RMSProp等更新规则。

模型保存和加载

模型保存

PATH = './cifar_net.pth'
torch.save(net.state_dict(), PATH)

模型加载

net = Net()
net.load_state_dict(torch.load(PATH))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值