Pytorch与视觉竞赛入门

打卡内容Coggle 30 Days of ML(21年11月)

任务1:PyTorch张量计算与Numpy的转换

 任务2:梯度计算和梯度下降过程

  • 1.学习自动求梯度原理
  • 2. 学习随机梯度下降原理(SGD)

随机梯度下降在计算下降最快的方向时时随机选一个数据进行计算,而不是扫描全部训练数据集,这样就加快了迭代速度。随机梯度下降并不是沿着J(θ)下降最快的方向收敛,而是震荡的方式趋向极小点

  •  3. 使用numpy创建一个y=10*x+4+noise(0,1)的数据, 其中x是0到100的范围,以0.01进行等差数列, 定义w和b,并使用随机梯度下降,完成回归拟合.
  • 3.1 首先定义初始数据x,y,noise,然后根据这些拟合出w,b
import torch

device = torch.device("cuda:0")
x = torch.linspace(0, 100, 10000, device=device, dtype=torch.float)
noise=torch.rand(10000, device=device, dtype=torch.float)
y = 10 * x + 4.0 + noise
  •  3.2 初步使用tensor的前向反向传播解题
    w = torch.randn((), device=device, dtype=torch.float)
    b = torch.randn((), device=device, dtype=torch.float)
    learning_rate = 1e-8
    for t in range(50000):
    
        y_pred = w * x + b                         #前向传递,计算y的预测值
        loss = (y_pred - y).pow(2).sum().item()    #损失函数
    
        grad_y_pred = 2.0 * (y_pred - y)           #反向传递,计算w,b相对于损失的梯度
        grad_b = grad_y_pred.sum()
        grad_w = (grad_y_pred * x).sum()
        b -= learning_rate * grad_b                #使用梯度下降更新权重
        w -= learning_rate * grad_w
        
    print(w.item(),b.item())

    初始学习率设小一点,要不然loss出现nan, 该方法循环了5万次才得到较好的结果,

    w,b 分别为10.004472732543945 4.203275680541992
  • 3.3 使用Autograd求解
w = torch.randn((), device=device, dtype=torch.float, requires_grad=True)
b = torch.randn((), device=device, dtype=torch.float, requires_grad=True)
learning_rate = 1e-8
for k in range(50000):
    y_pred = w * x + b
    loss = (y_pred - y).pow(2).sum()
    loss.backward()
    
    with torch.no_grad():
        w -= learning_rate * w.grad
        b -= learning_rate * b.grad
        w.grad = None
        b.grad = None
print(w.item(),b.item())

 w,b 分别为10.004472732543945 4.203275680541992

  • 3.4 使用nn包
  • class Polynomial(torch.nn.Module):
        def __init__(self):
            super().__init__()
            self.w = torch.nn.Parameter(torch.randn(()))
            self.b = torch.nn.Parameter(torch.randn(()))
        def forward(self, x):
            return self.b + self.w * x
    
    model = Polynomial()
    loss_fn = torch.nn.MSELoss(reduction='sum')
    optimizer = torch.optim.SGD(model.parameters(), lr=1e-8)
    for t in range(50000):
        y_pred = model(x)
        loss = loss_fn(y_pred, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    w,b的结果为 10.00623893737793 和4.085504531860352,可以看出使用SGD对结果有益处。

任务3:PyTorch全连接层原理和使用 

  • 1.学习全连接网络,参考文章
  • 2.在pytorch中使用矩阵乘法实现全连接层
  • 3.使用nn.Linear层
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel,self).__init__()
        self.lr = nn.Linear(1,1)
    def forward(self, x):  
        return self.lr(x)

model = MyModel()                                          #实例化模型
optimizer = torch.optim.SGD(model.parameters(),lr=1e-6)    #实例化优化器
loss_fn = nn.MSELoss()                                     #实例化损失函数

for i in range(5000):
    optimizer.zero_grad()          #梯度置为0
    y_predict = model(x)           #调用模型得到预测值
    loss = loss_fn(y_predict,y)    # 通过损失函数,计算得到损失
    loss.backward()                #反向传播,计算梯度
    optimizer.step()               #更新参数

任务4:PyTorch激活函数原理和使用

任务5:PyTorch常见的损失函数和优化器使用

学习率设置了0.1,0.01出现了nan,所以设置了更小的1e-6。

任务6:PyTorch卷积层原理和使用

CNN (Convolutional Neural Network ) 是一种前馈神经网络,由一个或多个卷积层和顶端的全连接层组成。同时包括了关联权重和池化层。

卷积层是卷积神经网络的核心。卷积运算是用卷积分别乘以输入向量中的每个元素,然后输出一个代表每个输入信息的张量。其中卷积核又叫权重过滤器(过滤器 filter)。

卷积核比较简单的过滤器有 Horizontalfilter,Verticalfilter, SobelFilter等,这些滤波器可以检测图像的水平边缘,垂直边缘,增强图像中心区域权重等。

检测边缘特征的滤波器类似于神经网络中的权重矩阵,需要通过梯度下降反复迭代求得。卷积神经网络的主要目的就是计算出这些filter 的数值。得到了这些 filter 后,卷积神经网络的浅层网络就实现了对图像所有边缘特征的检测。

  • 步骤2:计算下如下卷积层的参数量

nn.Conv2d(in_channels=1, out_channels=32, kernel_size=5, stride=1, padding=2)

参数量是32*5*5=800

任务7:PyTorch池化层和归一化层

池化层就是下采样,通过卷积层获取图像的特征后,理论上可以直接使用这些特征训练分类器。但是这样的计算量就很大,容易产出过拟合,就要进一步降低网络训练参数即模型的过拟合程度,就要进行池化处理。下图是三种常见池化方法

  • batchNorm是在batch上,对小batchsize效果不好;
  • layerNorm在通道方向上,主要对RNN作用明显;
  • instanceNorm在图像像素上,用在风格化迁移;
  • GroupNorm将channel分组再做归一化, 在batchsize<16的时候, 可以使用这种归一化。

 

任务8:使用PyTorch搭建VGG网络

  • 步骤1:理解VGG网络的原理
  • 步骤2:使用pytorch搭建VGG网络模型。
  • 步骤3:打印出VGG 11层模型 每层特征图的尺寸,以及参数量。

 

 本文就不一层一层搭建网络了,直接调用torchvision.mocels.vgg11().

上图可以看出每层的结构与参数量。

任务9:使用PyTorch搭建ResNet网络

https://zhuanlan.zhihu.com/p/263526658

  • 步骤1:理解ResNet网络的原理。
  • 步骤2:使用pytorch搭建ResNet网络模型。
  • 步骤3:打印出ResNet 18模型 每层特征图的尺寸,以及参数量。

任务10:使用PyTorch完成Fashion-MNIST分类

https://github.com/masoudrostami/Fashion-MNIST-using-PyTorch/blob/main/MNIST%20Fashion%20Project.ipynb

  • 步骤1:搭建4层卷积 + 2层全连接的分类模型。
  • 步骤2:在训练过程中记录下每个epoch的训练集精度和测试集精度。

任务11:使用PyTorch完成人脸关键点检测

数据集:1---    2--

  • 步骤1:搭建4层卷积 + 2层的模型完成关键点回归。
  • 步骤2:使用resnet18预训练模型完成关键点回归。

任务12:使用PyTorch搭建对抗生成网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值