• PYTORCH基本功ResNet


    PYTORCH基本功-ResNet

    一、结构

    二、原理

    为什么计算差值会比计算fx更容易优化

     极端的例子是   真实的目标函数就是红线,训练集是上方的曲线,减去红线变为下方的 曲线。

    1 训练可以减少资源

    2 减法后的残差,量级减少,模型更可以专注 局部或者外轮廓的变化,会拟合得更好。

    技巧:如果需要改变这个块的输出尺寸,需要添加一个conv1x1的卷积

    import torch
    import torchvision
    import numpy as np
    from torch import nn
    from torch.nn import functional as F
    class Resduial(nn.Module):
        def __init__(self,input_channels, num_channels, use_conv1x1, stride):
            super(Resduial, self).__init__()
            self.conv1 = nn.Conv2d(in_channels=input_channels, out_channels=num_channels, kernel_size=3,padding=1, stride=stride)
            self.conv2 = nn.Conv2d(in_channels=num_channels, out_channels=num_channels,kernel_size=3, padding=1, stride=stride)
            self.bn1 = nn.BatchNorm2d(num_channels)
            self.bn2 = nn.BatchNorm2d(num_channels)
            if use_conv1x1:
                self.conv1x1 = nn.Conv2d(in_channels=input_channels, out_channels=num_channels,kernel_size=1,stride=stride)
            else:
                self.conv1x1 = None
    
            pass
        def forward(self, x):
            import pdb; pdb.set_trace()
            #1
            y = self.conv1(x)
            y = self.bn1(y)
            y = F.relu(y)
            #2
            y = self.conv2(y)
            y = self.bn2(y)
            if self.conv1x1:
                x = self.conv1x1(x)
            y = y + x
            y = F.relu(y)
            return y
    x = torch.rand(4,3,6,6)
    
    resd = Resduial(3,3,use_conv1x1=True, stride=1)
    y = resd(x)
    print(y.shape)
    

      

    bottleneck结构代码

    参考链接代码:https://blog.csdn.net/hxxjxw/article/details/106582884

  • 相关阅读:
    ScriptX实现的打印功能 只兼容IE
    JS 打印DIV
    C语言的代码内存布局
    二叉树
    C++中explicit关键字的作用
    基类和派生类
    C++ 输入输出流 总结
    python网络编程(六)---web客户端访问
    python 网络编程(五)---DNS域名系统
    python 网络编程(一)---基础
  • 原文地址:https://www.cnblogs.com/lx63blog/p/16111480.html
Copyright © 2020-2023  润新知