前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CIFAR10数据集实战-ResNet网络构建(中)

CIFAR10数据集实战-ResNet网络构建(中)

作者头像
用户6719124
发布于 2020-02-24 10:06:55
发布于 2020-02-24 10:06:55
68800
代码可运行
举报
运行总次数:0
代码可运行

再定义一个ResNet网络

我们本次准备构建ResNet-18层结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ResNet(nn.Module):

    def __init__(self):
        super(ResNet, self).__init__()

        self.conv1 = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64)
        )
        # 紧跟着要进行四次这样的单元
        # 构建辅助函数,使[b, 64, h, w] => [b, 128, h, w]
        self.blk1 = ResBlk(64, 128)
        # 构建辅助函数,使[b, 128, h, w] = > [b, 256, h, w]
        self.blk2 = ResBlk(128, 256)
        # 构建辅助函数,使[b, 256, h, w] = > [b, 512, h, w]
        self.blk3 = ResBlk(256, 512)
        # 构建辅助函数,使[b, 512, h, w] = > [b, 1024, h, w]
        self.blk4 = ResBlk(512, 1024)

接下来构建ResNet-18的forward函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def forward(self, x):
    x = F.relu(self.conv1(x))
    # [b, 64, h, w] => [b, 1024, h, w]
    x = self.blk1(x)
    x = self.blk2(x)
    x = self.blk3(x)
    x = self.blk4(x)

由于我们要进行10分类问题,要将添加代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.outlayer = nn.Linear(1024, 10)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = self.outlayer(x)
return x

为确定具体维度大小,我们先构建假数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def main():
    blk = ResBlk(64, 128)
    tmp = torch.randn(2, 3, 32, 32)
    out = blk(tmp)
    print(out.shape)

if __name__ == "__main__":
    main()

此时代码为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import torch.nn as nn
import torch.nn.functional as F

class ResBlk(nn.Module):
    # 与上节一样,同样resnet的block单元,继承nn模块
    def __init__(self, ch_in, ch_out):
        super(ResBlk, self).__init__()
        # 完成初始化

        self.conv1 = nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=1, padding=1)
        self.bn1 = nn.BatchNorm2d(ch_out)
        # 进行正则化处理,以使train过程更快更稳定
        self.conv2 = nn.Conv2d(ch_out, ch_out, kernel_size=3, stride=1, padding=1)
        self.bn2 = nn.BatchNorm2d(ch_out)

        self.extra = nn.Sequential()

        if ch_out != ch_in:
            self.extra = nn.Sequential(
                nn.Conv2d(ch_in, ch_out, kernel_size=1, stride=1),
                nn.BatchNorm2d(ch_out),
            )



    def forward(self, x):
        # 这里输入的是[b, ch, h, w]
        out = F.relu(self.bn1(self.conv1(x)))
        out = F.relu(self.bn2(self.conv2(out)))


        out = self.extra(x) + out
        # 这便是element.wise add,实现了[b, ch_in, h, w][b, ch_out, h, w]两个的相加

        return out


class ResNet(nn.Module):

    def __init__(self):
        super(ResNet, self).__init__()

        self.conv1 = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64)
        )
        # 紧跟着要进行四次这样的单元
        # 构建辅助函数,使[b, 64, h, w] => [b, 128, h, w]
        self.blk1 = ResBlk(64, 128)
        # 构建辅助函数,使[b, 128, h, w] = > [b, 256, h, w]
        self.blk2 = ResBlk(128, 256)
        # 构建辅助函数,使[b, 256, h, w] = > [b, 512, h, w]
        self.blk3 = ResBlk(256, 512)
        # 构建辅助函数,使[b, 512, h, w] = > [b, 1024, h, w]
        self.blk4 = ResBlk(512, 1024)

        self.outlayer = nn.Linear(1024, 10)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        # [b, 64, h, w] => [b, 1024, h, w]
        x = self.blk1(x)
        x = self.blk2(x)
        x = self.blk3(x)
        x = self.blk4(x)

        x = self.outlayer(x)
        return x

def main():
    blk = ResBlk(64, 128)
    tmp = torch.randn(2, 3, 32, 32)
    out = blk(tmp)
    print(out.shape)

if __name__ == "__main__":
    main()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CIFAR-10 数据集实战——构建ResNet18神经网络
Block中进行了正则化处理,以使train过程更快更稳定。同时要考虑,如果两元素的ch_in和ch_out不匹配,进行加法时会报错,因此需要判断一下,如果不想等,就用1×1的卷积调整一下
mathor
2020/01/22
1.7K0
CIFAR10数据集实战-ResNet网络构建(上)
之前讲到过,ResNet包含了短接模块(short cut)。本节主要介绍如何实现这个模块。
用户6719124
2020/01/14
1.1K0
CIFAR10数据集实战-ResNet网络构建(上)
深度学习实战之手写签名识别(100%准确率、语音播报)
在完成了上述的环境搭建后,即可进入到准备阶段了。这里准备的有数据集的准备、以及相关代码的主备。
陶陶name
2022/05/13
1.7K0
深度学习实战之垃圾分类
垃圾分类,指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用;然而我们在日常生活中认为对垃圾分类还是有些不知所措的,对干垃圾、湿垃圾……分的不是很清楚,由此我们就想到了使用深度学习的方法进行分类。简介 本篇博文主要会带领大家进行数据的预处理、网络搭建、模型训练、模型测试 1. 获取数据集 这里笔者已经为大家提供了一个比较完整的数据集,所以大家不必再自己去收集数据了 数据集链接:https://pan.baidu
陶陶name
2022/05/13
6640
CIFAR10数据集实战-ResNet网络构建(下)
这里注意到由[2, 64, 32, 32]到[2, 128, 32, 32],channel数量翻倍,而长和宽没有变化。这样势必会导致x的维度会越来越大。
用户6719124
2020/02/24
9950
Transfer Learning
通过网络上收集宝可梦的图片,制作图像分类数据集。我收集了5种宝可梦,分别是皮卡丘,超梦,杰尼龟,小火龙,妙蛙种子
mathor
2020/02/17
4630
Pytorch-ResNet(残差网络)-下
在左图(准确率)的比较中,从AlexNet到GoogleNet再到ResNet,准确率逐渐提高。20层结构是很多网络结构性能提升的分水岭,在20层之前,模型性能提升较容易。但在20层之后,继续添加层数对性能的提升不是很明显。但ResNet很好地解决了高层数带来的误差叠加问题,因此性能也随着层数的增加而提升。
用户6719124
2019/12/04
1.2K0
​​​​【动手学深度学习】残差网络(ResNet)的研究详情
启动jupyter notebook,使用新增的pytorch环境新建ipynb文件,为了检查环境配置是否合理,输入import torch以及torch.cuda.is_available() ,若返回TRUE则说明研究环境配置正确,若返回False但可以正确导入torch则说明pytorch配置成功,但研究运行是在CPU进行的,结果如下:
SarPro
2024/06/14
3320
​​​​【动手学深度学习】残差网络(ResNet)的研究详情
PyTorch实现ResNet18
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141287.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
1K1
PyTorch实现ResNet18
【深度学习实验】卷积神经网络(七):实现深度残差神经网络ResNet
输入数据通过上述序列模块self.b1、self.b2、self.b3、self.b4、self.b5和self.head进行处理,最终输出分类结果。
Qomolangma
2024/07/30
5020
【深度学习实验】卷积神经网络(七):实现深度残差神经网络ResNet
初识Cifar10之vgg网络
vgg是由牛津大学cv组和谷歌deepmind一起研究出来的深度卷积神经网络,我们通常说的vgg模型是指vgg-16(13层卷积层+3层全连接层)
Tom2Code
2022/06/08
7130
初识Cifar10之vgg网络
resnet18 pytorch_如何搭建服务器
ResNet18的搭建请移步:使用PyTorch搭建ResNet18网络并使用CIFAR10数据集训练测试 ResNet34的搭建请移步:使用PyTorch搭建ResNet34网络 ResNet34的搭建请移步:使用PyTorch搭建ResNet50网络
全栈程序员站长
2022/11/08
3050
resnet18 pytorch_如何搭建服务器
ResNet18复现「建议收藏」
首先将网络分为四层(layers),每层有两个模块组成,除了第一层是两个普通的残差块组成,其它三层有一个普通的残差块和下采样的卷积块组成。输入图像为3x224x224格式,经过卷积池化后为64x112x112格式进入主网络架构。
全栈程序员站长
2022/09/01
4580
ResNet18复现「建议收藏」
卷积神经网络——下篇【深度学习】【PyTorch】
批量归一化可以解决深层网络中梯度消失和收敛慢的问题,通过固定每个批次的均值和方差来加速收敛,一般不改变模型精度。批量规范化已经被证明是一种不可或缺的方法,它适用于几乎所有图像分类器。
来杯Sherry
2023/08/24
3290
卷积神经网络——下篇【深度学习】【PyTorch】
Pytorch 基于ResNet-18的服饰识别(使用Fashion-MNIST数据集)
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Pytorch 基于ResNet-18的服饰识别(使用Fashion-MNIST数据集) 更多内容请见👇 Pytorch 基于AlexNet的服饰识别(使用Fashion-MNIST数据集) Pytorch 基于VGG-16的服饰识别(使用Fashion-MNIST数据集) Pytorch 基于NiN的服饰识别
小嗷犬
2022/11/15
1.1K0
Pytorch 基于ResNet-18的服饰识别(使用Fashion-MNIST数据集)
基于Pytorch构建ResNet网络对cifar-10进行分类
何凯明等人在2015年提出的ResNet,在ImageNet比赛classification任务上获得第一名,获评CVPR2016最佳论文。
python与大数据分析
2023/09/03
7220
基于Pytorch构建ResNet网络对cifar-10进行分类
LetNet、AlexNet、ResNet网络模型实现手写数字识别
本篇文章主要分享使用 LetNet、AlexNet、ResNet网络模型实现手写数字识别,文章是基于《MNIST手写数字识别》这篇文章的拓展:
不去幼儿园
2024/12/03
2060
LetNet、AlexNet、ResNet网络模型实现手写数字识别
基于Pytorch构建GoogLeNet网络对cifar-10进行分类
GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
python与大数据分析
2023/09/03
5740
基于Pytorch构建GoogLeNet网络对cifar-10进行分类
从零开始学Pytorch(九)之批量归一化和残差网络
处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。 标准化处理输入数据使各个特征的分布相近
墨明棋妙27
2022/09/23
9470
ResNet34+Unet(可以直接用)
四次Skipconnect分别在:Maxpool前;另外三次在通道数变化前。 上采样combine时采用的是插值(nn.functionnal.interpolate)。
全栈程序员站长
2022/11/10
6040
推荐阅读
相关推荐
CIFAR-10 数据集实战——构建ResNet18神经网络
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验