PyTorch学习笔记 (一)——入门篇

一、Tensor入门


inplace method:

y.add_ (x)  equals  y = y.add(x)

tensor和numpy类型可以快速转换,是共享内存,几乎不消耗时间。但应注意值改变问题。


使用GPU加速

Tensor的.cuda方法可以将其转化为GPU的Tensor
注释应该是1G才对
可以发现GPU比CPU快了将近十倍



二、Autograd:自动微分

autograd.Variable是Autograd的核心类,它封装了Tensor,其主要包含三个属性:datagradgrad_fn.
(在新版本上,感觉Variable和Tensor差别不大,Tensor加上requires_grad参数也可以反向传播求导)
data: Tensor;
grad:data的梯度;
grad_fn:指向一个用来反向传播计算输入梯度的函数对象.

定义Variable时,一定要为requires_grad参数赋True,否则不能反向传播求梯度

grad在反向传播的过程中是累加的,所以每次反向传播之前应该把梯度清零x.grad.zero_()



三、神经网络

torch.nn是专门为神经网络设计的模块接口。nn构建于Autograd之上,可以用来定义和运行神经网络。nn.Module是nn中最重要的类,可以把它看作一个网络的封装。

以LeNet为例:

定义网络:
from torch import nn
from torch.nn import functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16*5*5,120)
        self.fc2 = nn.Linear(120,84)
        self.fc3 = nn.Linear(84,10)

    def forward(self, x):
        x = F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        x = F.max_pool2d(F.relu(self.conv2(x)),2)
        x = x.view(x.size()[0],-1)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x


net = Net()

只要在nn.Module的子类中定义了forward,backward函数就会自动被实现。

损失函数
out = net(input)
target = t.Tensor(1,10)
target[0] = t.arange(0,10).float()
target = Variable(target)
criterion = nn.MSELoss()
loss = criterion(out,target)
loss.backward()

调用loss.backward()函数时,该图会动态生成并自动微分,也会自动计算图中参数的导数。

优化器

在反向传播计算完所有参数的梯度后,还需要用优化器更新网络的权重和参数。torch.optim中实现了深度学习中绝大多数的优化方法。

optimizer = optim.SGD(net.parameters(),lr = 0.01)
optimizer.zero_grad()
loss.backward()
optimizer.step()  # 更新参数
数据加载和预处理

在深度学习中数据加载及预处理是非常复杂的,但PyTorch提供了一些可极大简化和加快数据处理流程的工具。同时,对于常用数据集,PyTorch也提供了封装好的接口,这些数据集主要保存在torchvision中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师大先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值