pytorch搭建squeezenet网络的整套工程(升级版)

news2024/11/22 15:28:22

上一篇当中,使用pytorch搭建了一个squeezenet,效果还行。但是偶然间发现了一个稍微改动的版本,拿来测试一下发现效果会更好,大概网络结构还是没有变,还是如下的第二个版本:
在这里插入图片描述
具体看网络结构代码:

import torch
import torch.nn as nn


class Fire(nn.Module):

    def __init__(self, in_channel, out_channel, squzee_channel):

        super().__init__()
        self.squeeze = nn.Sequential(
            nn.Conv2d(in_channel, squzee_channel, 1),
            nn.BatchNorm2d(squzee_channel),
            nn.ReLU(inplace=True)
        )

        self.expand_1x1 = nn.Sequential(
            nn.Conv2d(squzee_channel, int(out_channel / 2), 1),
            nn.BatchNorm2d(int(out_channel / 2)),
            nn.ReLU(inplace=True)
        )

        self.expand_3x3 = nn.Sequential(
            nn.Conv2d(squzee_channel, int(out_channel / 2), 3, padding=1),
            nn.BatchNorm2d(int(out_channel / 2)),
            nn.ReLU(inplace=True)
        )

    def forward(self, x):

        x = self.squeeze(x)
        x = torch.cat([
            self.expand_1x1(x),
            self.expand_3x3(x)
        ], 1)

        return x

class SqueezeNet(nn.Module):

    """mobile net with simple bypass"""
    def __init__(self, class_num=100):

        super().__init__()
        self.stem = nn.Sequential(
            nn.Conv2d(3, 96, 3, padding=1),
            nn.BatchNorm2d(96),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, 2)
        )

        self.fire2 = Fire(96, 128, 16)
        self.fire3 = Fire(128, 128, 16)
        self.fire4 = Fire(128, 256, 32)
        self.fire5 = Fire(256, 256, 32)
        self.fire6 = Fire(256, 384, 48)
        self.fire7 = Fire(384, 384, 48)
        self.fire8 = Fire(384, 512, 64)
        self.fire9 = Fire(512, 512, 64)

        self.conv10 = nn.Conv2d(512, class_num, 1)
        self.avg = nn.AdaptiveAvgPool2d(1)
        self.maxpool = nn.MaxPool2d(2, 2)

    def forward(self, x):
        x = self.stem(x)

        f2 = self.fire2(x)
        f3 = self.fire3(f2) + f2
        f4 = self.fire4(f3)
        f4 = self.maxpool(f4)

        f5 = self.fire5(f4) + f4
        f6 = self.fire6(f5)
        f7 = self.fire7(f6) + f6
        f8 = self.fire8(f7)
        f8 = self.maxpool(f8)

        f9 = self.fire9(f8)
        c10 = self.conv10(f9)

        x = self.avg(c10)
        # x = x.view(x.size(0), -1)
        x = torch.flatten(x, start_dim=1)

        return x

def squeezenet(class_num=100):
    return SqueezeNet(class_num=class_num)

最大的变化就是在卷积层和relu激活层之间加了个bn层,包括所有的fire结构内。其余就是卷积和池化的kernel_size或stride的微调,包括最后去掉了dropout,以及最后部分的网络结构也稍作调整:
在这里插入图片描述
将这个网络结构与上一个的网络结构训练同一训练集,得到的模型测试同一测试集,发现这个模型的准确率会比上一个高几个点。而且上一个模型训练容易不稳定,训练到一半直接梯度爆炸了,需要不断调参也比较麻烦,这个模型lr直接0.1或0.01都能训练很好,所以个人更推荐这个网络模型。
下一篇编辑此网络结构的caffe版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1191926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程控制——进程的程序替换

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻进程的程序替换概念&#x…

R语言和jsonlite库编写代码示例

R语言和jsonlite库来下载的程序。 r # 导入jsonlite库 library(jsonlite) # 设置代理主机和端口 proxy_host <- "" proxy_port <- # 使用httr库创建一个对象 proxy <- create_proxy(proxy_host, proxy_port) # 使用httr库的GET方法下载网页内容 url <…

输入网址到网页显示,期间发生了什么?(收藏篇)

解析url 首先浏览器做的第一步工作就是要对 URL 进行解析&#xff0c;从而生成发送给 Web 服务器的请求信息。对 URL 进行解析之后&#xff0c;浏览器确定了 Web 服务器和文件名&#xff0c;接下来就是根据这些信息来生成 HTTP 请求消息了。 DNS解析 通过浏览器解析 URL 并…

学生用什么台灯对眼睛最好?双十一优质好用护眼台灯推荐

护眼台灯作为时下火爆的学生清单单品&#xff0c;深受众多学生以及家长的认可&#xff0c;市面上的护眼台灯品牌众多&#xff0c;但很多品牌存在不合格、劣质、虚假宣传的问题&#xff0c;为了帮大家避坑&#xff0c;我这个资深测评师反复测评了三十多款&#xff0c;今天给大家…

【Linux】进程程序替换

文章目录 替换原理站在进程的角度站在程序的角度初体验及理解原理 替换函数函数解释命名理解exec系列函数与main函数之间的关系在一个程序中调用我们自己写的程序 替换原理 创建子进程的目的是什么&#xff1f; ->想让子进程执行父进程代码的一部分 执行父进程对应的磁盘代码…

ROS源码安装应用,VSCode

ROS源码安装应用 安装一下VSCode 前置文章 到安装程序的目录中: 完成克隆 编译 catkin_make打开ros核心 roscore打开应用程序 rosrun turtlesim turtlesim_node安装一下VSCode deb下载地址 sudo dpkg -i code_1.84.1-1699275408_amd64.deb添加项目工程到工作空间&#xff…

什么是伺服电机?Parker派克伺服电机盘点

一、什么是伺服电机&#xff1f; 要准确地定义伺服电机&#xff0c;我们首先需理解其核心特性&#xff1a;反馈与闭环控制。伺服电机凭借这些特性&#xff0c;能精确控制扭矩、速度或位置&#xff0c;即使在零速度下&#xff0c;也能保持足够的扭矩以锁定负载。 伺服电机与其…

JVS-智能BI数据集管理:打造高效、准确数据应用基础

现今的数字化、智能化时代&#xff0c;数据被誉为企业的新型资产&#xff0c;企业面临的数据量日益庞大&#xff0c;如何对这些数据进行高效、准确的管理和应用&#xff0c;直接决定了企业的运营效率和决策水平。 在这样的背景下&#xff0c;仅仅收集数据并不足够&#xff0c;…

IDEA 关闭SpringBoot启动Logo/图标

一、环境 1、SpringBoot 2.6.4 Maven POM格式 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version><relativePath/></parent> 2、IDE…

第五章《数据降维:深入理解 PCA 的来龙去脉》笔记

主成分分析(Principal Component Analysis&#xff0c;PCA) 就是机器学习中一种常用且有效的数据降维方法。 5.1 PCA是什么 PCA 将相关性高的变量转变为较少的独立新变量&#xff0c;实现用较少的综合指标分别代表存在于 各个变量中的各类信息&#xff0c;既减少高维数据的变…

vue3 自动导入composition-apiI和组件

1.api的自动导入 常规写法&#xff1a; <script setup>import { ref, reactive, onMounted, computed ,watch } from vue;import { useRouter } from "vue-router";const router useRouter();const person reactive ({name&#xff1a;张三&#xff0c;age…

cadence virtuoso layout drc error

For 0.11um design, 2.5/3.3V transistor channel (overlap of Poly and AA) enclosure by DG.( Designer can waive this rule for 0.13um design).>0.30 对于 0.11 微米的设计&#xff0c;2.5/3.3V 晶体管通道&#xff08;Poly 和 AA 的重叠部分&#xff09;由 DG 封装&a…

“三大阶段稳定性测试”筑牢长安链信任基石

前言 随着长安链应用生态的不断丰富、面对的应用场景更加多元&#xff0c;稳定性测试在长安链测试流程中占到越来越重要的位置。本文将介绍长安链稳定性测试的发展历程及如何通过三大阶段稳定性测试应对不断出现的复杂的商业需求&#xff0c;筑牢长安链信任基石。 功能测试和…

Adobe Photoshop 2020给证件照换底

1.导入图片 2.用魔法棒点击图片 3.点选择&#xff0c;反选 4.选择&#xff0c;选择并遮住 5.用画笔修饰证件照边缘 6. 7.更换要换的底的颜色 8.新建图层 9.使用快捷键altdelete键填充颜色。 10.移动图层&#xff0c;完成换底。

汇编与反汇编

程序处理的4个步骤 我们的第一个LED程序涉及两个文件&#xff1a;start.S、main.c&#xff0c;它们的处理过程如下&#xff1a; 对于汇编程序&#xff0c;经过汇编之后&#xff0c;转换成目标文件&#xff08;里面包含机器码&#xff09;。对于C程序&#xff0c;经过预处理之…

开源微信万能表单源码系统+自由创建多表单+自定义各行业表单 全开源可二开 带完整的搭建教程

微信作为一个庞大的社交平台&#xff0c;为企业和个人提供了丰富的应用场景。其中&#xff0c;微信公众平台可以为企业提供自定义表单的功能&#xff0c;以满足各种业务需求。然而&#xff0c;在实际应用中&#xff0c;很多企业需要更强大、更灵活的表单系统来处理复杂的业务逻…

C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式

最近在开发的时候&#xff0c;特别是遇到关于跨DLL申请对象、指针、内存等问题的时候遇到了这么一个问题。 问题 跨DLL能不能调用到DLL中提供的单例&#xff1f; 问题比较简单&#xff0c;就是我现在有一个进程A&#xff0c;有DLL B DLL C&#xff0c;这两个DLL都依赖DLL D的…

婴儿专用洗衣机哪个牌子比较好?好用的迷你洗衣机测评

为人父母&#xff0c;是一件非常美妙的事情&#xff0c;在养育新生命的过程中&#xff0c;细心的照顾是非常重要的&#xff0c;而最小的细节&#xff0c;就是让婴儿的衣服保持最温和、最有效的清洁。而婴儿洗衣机是当今不少家庭的福音&#xff0c;它给家长们带来了巨大的方便&a…

Java 并发编程面试题——重入锁 ReentrantLock

目录 1.ReentrantLock 是什么&#xff1f;2.✨什么是重入锁&#xff1f;ReentrantLock 是如何实现可重入特征的&#xff1f;3.公平锁和非公平锁有什么区别&#xff1f;ReentrantLock 分别是如何实现的&#xff1f;4.✨ReentrantLock 的实现原理是什么&#xff1f;5.为什么 Reen…

一文了解Nginx及其基本配置

一、关于Nginx Nginx是一个开源的高性能HTTP和反向代理服务器。 Nginx可以用于处理静态资源、负载均衡、反向代理和缓存等任务。 Nginx被广泛用于构建高可用性、高性能的Web应用程序和网站。 Nginx具有低内存消耗、高并发能力和良好的稳定性&#xff0c;因此在互联网领域非常受…