pytorch实现的Resnet18、VGG16

深度学习--CNN应用--VGG16网络和ResNet18网络 VGG论文大家有兴趣的可以去研读一下。首先呢,我们先简单了解一下VGG网络的来源自2012年AlexNet在lmageNet图片分类比赛中大获成功以来,关于深度神经网络的研究又一次如火如茶般进行;VGGNet 是由牛津大学视觉几何小组 (Visual Geometry Group,VGG)提出的一种深层卷积网络结构,他们以 7.32% 的错误率赢得了 2014年 ILSVRC 分类任务的亚军(冠军由 GoogLeNet 以 6.65% 的错误率夺得) 阅读详情
'''
    Resnet18 代码
    date:2019/11/30
    author:hzp
'''
import torch
import torch.nn as nn
import torch.nn.functional as F


class ResidualBlock(nn.Module):
    def __init__(self, inchannel, outchannel, stride=1):
        super(ResidualBlock, self).__init__()
        self.left = nn.Sequential(
            nn.Conv2d(inchannel, outchannel, kernel_size=3, stride=stride, padding=1, bias=False),
            nn.BatchNorm2d(outchannel),
            nn.ReLU(inplace=True),
            nn.Conv2d(outchannel, outchannel, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(outchannel)
        )
        self.shortcut = nn.Sequential()
        if stride != 1 or inchannel != outchannel:
            self.shortcut = nn.Sequential(
                nn.Conv2d(inchannel, outchannel, kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(outchannel)
            )

    def forward(self, x):
        out = self.left(x)
        out += self.shortcut(x)
        out = F.relu(out)
        return out


class ResNet(nn.Module):
    def __init__(self, ResidualBlock, num_classes=40):
        super(ResNet, self).__init__()
        self.inchannel = 64
        self.conv1 = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(64),
            nn.ReLU(),
        )
        self.layer1 = self.make_layer(ResidualBlock, 64, 2, stride=1)
        self.layer2 = self.make_layer(ResidualBlock, 128, 2, stride=2)
        self.layer3 = self.make_layer(ResidualBlock, 256, 2, stride=2)
        self.layer4 = self.make_layer(ResidualBlock, 512, 2, stride=2)
        self.fc = nn.Linear(512, num_classes)

    def make_layer(self, block, channels, num_blocks, stride):
        strides = [stride] + [1] * (num_blocks - 1)  # strides=[1,1]
        layers = []
        for stride in strides:
            layers.append(block(self.inchannel, channels, stride))
            self.inchannel = channels
        return nn.Sequential(*layers)

    def forward(self, x):
        out = self.conv1(x)
        out = self.layer1(out)
        out = self.layer2(out)
        out = self.layer3(out)
        out = self.layer4(out)
        out = F.avg_pool2d(out, 4)
        out = out.view(out.size(0), -1)
        out = self.fc(out)
        return out


def ResNet18():
    return ResNet(ResidualBlock)

 

import torch.nn as nn
import torch.nn.functional as F


class VGG16(nn.Module):
    def __init__(self, num_classes, grayscale=False):
        dim = None
        if grayscale == True:
            dim = 1
        else:
            dim = 3

        super(VGG16, self).__init__()
        self.vgg_bone = nn.Sequential(
            nn.Conv2d(dim, 64, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
            nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
            nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
            nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
        )
        self.vgg_logit = nn.Sequential(
            nn.Linear(7 * 7 * 512, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, num_classes),
        )
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                m.weight.detach().normal_(0, 0.05)
                if m.bias is not None:
                    m.bias.data.detach().zero_()
            elif isinstance(m, nn.Linear):
                m.weight.detach().normal_(0, 0.05)
                m.bias.detach().detach().zero_()

    def forward(self, x):
        x = self.vgg_bone(x)
        x = x.view(x.size(0), -1)
        logit = self.vgg_logit(x)
        prob = F.softmax(logit)
        return logit, prob

 

VGG16 vs ResNet18实战:用PyTorch从零搭建猫狗分类器(附完整代码) 本文详细对比了VGG16和ResNet18在猫狗分类任务中的实战表现,提供了完整的PyTorch实现代码。通过分析两种CNN架构的特点、性能差异及适用场景,帮助开发者快速掌握深度学习图像分类的核心技术。文章包含数据预处理、模型构建、训练调优等完整流程,特别适合深度学习入门者和计算机视觉实践者参考。 阅读详情

相关推荐

AI入门:神经网络实战----迁移学习

前言 学过化学的人都知道,到现在为止,世界上一共只发现118种化学元素,通过不同的排列组合,却可以得到我们丰富多彩的世界。同样的,简单的几何结构也就那么几种,但正是由它们组成了这个世界。换个角度看,这个世界中的任何物体都是简单的几何结构中的一种或几种组合而成。 从上面的描述我们可以得出一个结论:任何物体的基本结构都是相似的。这个结论跟我们今天要学习的迁移学习有什么关系呢?请看下一段,什么是迁移学习。 什么是迁移学习? 在计算机视觉中,迁移学习往往使用带有卷积的神经网络 (不记得卷积神经网络的话,请查阅前面的

wangeil007的博客 1941

PyTorch 笔记Ⅹ——迁移学习ResNet18_&_VGG16

文章目录获取所使用的NVIDIA显卡设备谷歌云盘挂载及数据读取导入必要的包数据集制作获取设备信息数据可视化ResNet18ResNet18模型获取与配置参数配置开始训练模型读取与预测PIL与Transform读取方式VGG16VGG16模型获取与配置参数配置开始训练模型读取与预测OpenCV读取方式PIL与OpenCV对比OpenCV归一化处理图像PIL归一化处理图像 获取所使用的NVIDIA显卡设备 !nvidia-smi Tue Sep 1 10:29:57 2020 +-------

DeepHao'Blog 3969

AI模型优化:架构调整实战,架构师如何用ResNet替代VGG?

我们的目标是用更高效的ResNet架构替代传统VGG,解决VGG深层网络的「梯度消失」问题,提升模型精度和训练稳定性。VGG的核心缺陷分析;ResNet的残差原理拆解;从0到1实现VGG16与ResNet18;实战对比两者在CIFAR-10上的表现。故事引入:用「盖房子」类比VGG与ResNet的差异;核心概念:VGG的「积木堆叠」 vs ResNet的「残差支撑」;原理拆解:残差连接如何解决梯度消失(数学+代码);实战操作:用PyTorch实现两种模型,对比训练结果;应用场景。

AI天才研究院 994

pytorch实现resnet18(34,101,152)、vgg16对cifar10进行分类

1、pytorch简介 pytorch是由facebook所开源的深度学习框架,其框架重于强调于动态流图建立,其不同于google的tensorflow其静态Graph概念,其各有千秋。tensorflow更多贡献于distribution sysytem,企业分布式训练体系架构非常适合。pytorch是后来居上,其构造的框架API也在不断改善,但是pytorch对于类的构造、继承等...

josenxiao的博客 3717

Pytorch Note55 迁移学习实战猫狗分类

Pytorch Note55 迁移学习实战猫狗分类 文章目录Pytorch Note55 迁移学习实战猫狗分类加载数据集迁移学习网络定义训练模型的函数定义一个测试的函数1.AlexNet2.VGG163.ResNet184.DenseNet5.MobileNet V26.ShuffleNetV2总结 全部笔记的汇总贴:Pytorch Note 快乐星球 在这一部分,我会用迁移学习的方法,实现kaggle中的猫狗分类,这是一个二分类的问题,我们可以直接使用修改我们的预训练的网络卷积部分提取我们自己图片的特征,

风信子的猫Redamancy的快乐星球 2688

狗狗品种分类三模型实战包:VGG11、ResNet18与SE-ResNet训练全流程代码

直接运行就能上手的狗狗品种图像分类项目,包含完整PyTorch实现:从数据加载(dogbreed_data.py)、训练主程序(train.py)、工具函数(train_utils.py)到提交文件生成(submit.py)和标签预处理(csv_to_csv_label.py)。内置三个可对比模型——轻量级VGG11、经典ResNet18、以及加入SE注意力机制的SE-ResNet(senet_last.py),支持SGD/Adam双优化器切换,集成基础图像增强(随机裁剪、水平翻转、色彩抖动等)。所有脚本已

nokia的博客 235

ResNet18 vs VGG16实测对比:云端GPU 2小时搞定选型

效率优势:ResNet18在训练速度、推理速度和资源占用上全面领先,适合大多数生产场景准确率表现:虽然ResNet18参数更少,但在CIFAR-10上反而取得了更高准确率(82.3% vs 79.8%)实用建议:除非有特殊需求,否则ResNet18应该是图像分类任务的首选基准模型成本考量:使用云端GPU进行短期测试,成本可控制在几十元内,远低于长期租赁扩展性:两种模型都支持迁移学习,可轻松适配自定义数据集。

SilverfoxFalcon42的博客 901

基于PyTorch的CNN、VGG与ResNet人脸表情识别系统实战指南

卷积神经网络(CNN)是计算机视觉领域的核心基础架构,其通过卷积、池化等操作自动提取图像特征。其核心原理在于利用局部连接和权值共享,高效处理网格状数据(如图像)。这项技术的价值在于能够端到端地学习从原始像素到高级语义的映射,极大地推动了图像分类、目标检测等任务的发展。在实际应用中,模型选择与优化是关键,例如VGG网络通过堆叠小卷积核增加深度以提升表征能力,而ResNet则引入残差连接解决深度网络训练难题。针对人脸表情识别这类具体任务,数据增强和迁移学习是应对小数据集挑战、提升模型泛化性能的有效策略。本文以P

weixin_29038345的博客 260

【pytorch】pytorch自定义训练vgg16和测试数据集 微调resnet18全连接层

测试: correct = 0 total = 0 for data in test_loader: img,label = data outputs = net(Variable(img)) _,predict = torch.max(outputs.data,1) total += label.size(0) correct += (predict == label).sum() prin

qq_41358574的博客 4629

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 429

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3180

从猫狗分类实战出发:手把手教你用PyTorch实现VGG16和ResNet18

本文通过猫狗分类实战案例,详细介绍了如何使用PyTorch实现VGG16和ResNet18两种经典CNN模型。从数据预处理、模型架构解析到训练优化技巧,手把手教你掌握深度学习在计算机视觉中的应用,特别适合想要入门图像分类的开发者学习实践。

e3f4g5的博客 161

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 305

从VGG16到ResNet18:如何用PyTorch实现经典CNN网络(附完整代码)

本文详细讲解了如何使用PyTorch从零实现VGG16和ResNet18两大经典CNN网络。通过对比分析VGG16的规整堆叠与ResNet18的残差连接设计,深入探讨了其解决深层网络训练难题的核心思想,并提供了完整的代码实现、实战训练技巧及迁移学习方法,帮助开发者深入理解并掌握经典CNN架构的构建与应用。

qsc9012345的博客 423

Chapter 5 Gate Drivers and Level Shifters

Gate driver如下图所示, 包括功率管(带保护), Gate driver, Level shifter, Gate Supply 和Dead-time control.

2304_76736886的博客 2231

MTK平台LCD驱动开发实战:从零开始点亮你的Android屏幕

本文详细介绍了在MTK平台进行Android LCD驱动开发的完整流程。从理解LK与Kernel双核驱动框架入手,手把手讲解驱动结构体、屏幕参数配置、初始化序列编写以及PLL_CLOCK计算等核心步骤,并提供了系统集成配置与实用的调试避坑指南,帮助开发者高效点亮新屏幕。

terraform7cloud的博客 292

PyTorch实战:用VGG16和ResNet18搞定猫狗分类(附完整代码)

本文详细介绍了如何使用PyTorch框架实现VGG16和ResNet18两种经典卷积神经网络(CNN)进行猫狗分类任务。从数据预处理、模型构建到训练评估,提供了完整的代码实现和性能对比,帮助读者快速掌握深度学习在图像分类中的应用。文章特别强调了ResNet18在效率和准确率上的优势,并分享了模型优化和部署的实用技巧。

redis7keeper的博客 619

【KingSCADA】如何创建新应用

KingSCADA3.8集成开发环境是基于工程的应用管理模式,实现了对多个应用的集中开发和管理的功能,一个工程可以同时管理多个应用,即在KingSCADA3.8工程设计器中可以同时对多个应用进行开发,应用之间可以实现相互复制、粘贴等功能,大大提高了开发效率。(此处感觉和VS类似)使用KingSCADA3.8开发的系统称为应用,一个完整的应用一般包含以下部分或全部内容:IO设备、IO采集点、图形界面、动画链接、趋势曲线、报警和事件、历史记录、数据库、Web Server等部分。

做有价值的事,积累有价值的笔记! 3107

6_Face_Recognition_VGG16

看最后一部分,这里的6指的是最后一个全连接中的第六层,即”Linear(in_features=4096, out_features=17, bias=True)“因为这个数据集是自制的,所以要把图片进行统一尺寸、totensor、标准化(之前用的官方的数据集都是tensor类型的)2.自己训练权重+VGG(这里感觉,可能和VGG的参数量比较大有关,所以想换用参数量小些的ResNet18)这里其实发现,如果不改优化器的话,你用新的数据集的结果也许还不如原数据集的效果好。新数据:(反而卡在了17%)

2301_76792524的博客 160

【ESD专题】从原理上分析TVS管PCB Layout的经验法则

我们常常会听到的一些经验法则,按这些经验法则去做,一般也不会有什么问题,但是到底是为什么呢? 没有从原理上分析和证明的时候,往往在Layout之后还要担心实际测试结果怎么样。或是在实际测试出问题后,根本无法进行分析,难道说修改一个版本就好了?那要从哪里修改呢?也无从下手呀。...

一点硬件 1446

手把手教你学 MATLAB 实战训练(6.5):基础实战实例

MATLAB 是一款强大的数学软件,广泛应用于工程计算、信号处理、控制系统设计、图像处理等领域。学习 MATLAB 不仅可以提高你的编程技能,还能帮助你解决实际的数学和工程问题。下面我将通过几个实战训练实例来教你如何使用 MATLAB。

xiaoheshang_123的博客 366

网络结构介绍:简单模型、AlexNet、VGGNet、ResNet,并附2025秋招笔试题网络结构

前言一、简单的神经网络模型基础知识简单的网络结构二、AlxeNet网络结构特征提取部分 (`self.feature_extraction`)分类器部分 (`self.classifier`)前向传播 (`forward` 方法)三、VGG16网络结构卷积块 (`block1` 到 `block5`)卷积块具体分析全连接层 (`block6`)前向传播 (`forward` 方法)四、ResNet-18网络结构BasicBlock 类ResNet 类_make_layer 方法forward 方法。

qq_45749612的博客 1294

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从VGG到ResNet:手把手教你用PyTorch复现DeepLabV2的ASPP模块(附代码)

本文详细介绍了如何使用PyTorch实现DeepLabV2的ASPP模块,包括空洞卷积原理、ASPP模块的完整实现代码,以及VGG16和ResNet50作为backbone时的适配策略。通过对比不同backbone的特性,帮助开发者理解多尺度特征提取在语义分割中的应用,提升模型性能。

weixin_30905981的博客 582

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

六种不同模型下实现玉米叶病害识别(Python代码,pytorch框架,GUI界面,可以轻易替换为其它病害数据集)

本研究基于PyTorch框架实现了六种深度学习模型(MobileNetV3Small、自定义CNN、VGG16、AlexNet、ResNet18、GoogLeNet)对玉米叶病害的分类识别。数据集包含枯萎病(1145张)、褐锈病(1306张)、灰斑病(574张)和健康叶片(1162张)四类图像。研究创新性地开发了GUI界面,并新增了训练损失曲线、测试准确率曲线、混淆矩阵和分类报告等可视化功能。实验结果表明,自定义CNN模型在10个epoch下即可达到较高准确率,其他模型在50个epoch以上均取得95%以上

2501_93145701的博客 465

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

基于CNN的棉花不同病害叶识别(Python代码,pytorch框架,代码有详细中文注释,准确率在90%以上)

光伏产量预测系统是一款基于Python的桌面应用,集成CNN、LSTM等5种机器学习模型,提供用户管理、数据处理、模型训练及可视化分析功能。系统采用多线程训练和实时进度反馈,支持1-24小时预测,满足光伏电站运营和电力调度需求。通过Tkinter构建的友好界面和模块化设计,既适合科研也便于行业应用,未来可扩展云端同步和移动端开发。

shouhou6668889的博客 492

性能提升21倍!PyTorch加持Mac M1 GPU训练

点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路机器之心报道对于 Mac 用户来说,这是令人激动的一天。昨天,通过与苹果 Metal 团队工程师合作,PyTorch 官方宣布已正式支持在 M1 版本的 Mac 上进行 GPU 加速的 PyTorch 机器学习模型训练。此前,Mac 上的 PyTorch 训练仅能利用 CPU,但随着即将发布的 PyTorch...

机器学习算法与Python学习 1913
上一篇: 极限学习(elm)实现波士顿房价预测
下一篇: 数据正则化总结
silentkunden
博客等级 码龄9年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值