Sequential的使用和搭建实战

news2024/12/23 20:41:34

一、Sequential 是什么

Sequential 主要出现在 Keras 库中,这是一个用于构建和训练深度学习模型的高级 API。Sequential 类允许你按顺序构建神经网络模型,其中每一层都按照给定的顺序逐层堆叠。这种模型适用于大多数线性堆叠的神经网络结构。Sequential是按顺序构建网络:所有的层都按添加的顺序连接,因此可以很容易地构建具有线性堆叠结构的网络模型。

二、需要搭建的结构

在这里插入图片描述
上图是一个CIFAR 10 model结构
对Input经过一系列的卷积核(kernel),然后经过最大池操作(Max-pooling),对得到的结果进行展平,得到Outputs

三、搭建CIFAR 10 model结构

可以看到Conv2d 二维卷积层所需要的参数:
在这里插入图片描述

由CIFAR 10 model结构图可以得知Output需要32,从而通过下面的式子计算出padding和stride的参数,这里默认dilations空洞卷积参数为1,若把stride设置成1,那么求得padding的值为2,从而得到上面的参数。
在这里插入图片描述
函数解释:
Flatten是对数据进行展平
Linear 层可以将前一层的输出(可以是特征图、一维特征向量等)进行线性组合,以生成新的特征表示。这有助于网络学习输入数据中的复杂模式。Linear需要有输入输出,输入是6444,输出是64

from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear

class Sen(nn.Module):
    def __init__(self):
        super(Sen,self).__init__()
        #根据式子把所需要的参数的值给求出来
        self.conv1 = Conv2d(3, 32, 5, 1, 2)

        #根据结构图知道最大池化的参数是2
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = MaxPool2d(2)

        #经过Flatten进行数据的展平
        self.flatten = Flatten()

        #Linear 层可以将前一层的输出(可以是特征图、一维特征向量等)进行线性组合,以生成新的特征表示。这有助于网络学习输入数据中的复杂模式。
        #1024是64*4*4
        self.linear1 = Linear(1024, 64)
        self.linear2 = Linear(64, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

sen = Sen()
print(sen)

以上代码是直接根据CIFAR 10 model结构图一步一步的写的。

运行结果:
在这里插入图片描述

四、检查网络的正确性

如果把上面的代码网络写错,运行也不会报错,这样子我们就没法检验网络搭建是否出现错误。
例如我们把self.linear1 = Linear(1024, 64)改写成`self.linear1 = Linear(10240, 64)进行运行

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear

class Sen(nn.Module):
    def __init__(self):
        super(Sen,self).__init__()
        #根据式子把所需要的参数的值给求出来
        self.conv1 = Conv2d(3, 32, 5, 1, 2)

        #根据结构图知道最大池化的参数是2
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = MaxPool2d(2)

        #经过Flatten进行数据的展平
        self.flatten = Flatten()

        #Linear 层可以将前一层的输出(可以是特征图、一维特征向量等)进行线性组合,以生成新的特征表示。这有助于网络学习输入数据中的复杂模式。
        #1024是64*4*4
        self.linear1 = Linear(10240, 64)
        self.linear2 = Linear(64, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

sen = Sen()
print(sen)

运行结果:
在这里插入图片描述
可以看到也不会发生报错,这样子我们无法识别搭建的网络是否出现错误,这时候我们可以通过一个假想输入来进行判断。

通过一个假想的输入:

input = torch.ones((64, 3, 32, 32))
output = sen(input)
print(output.shape)

来进行代码正确性的判断:

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear

class Sen(nn.Module):
    def __init__(self):
        super(Sen,self).__init__()
        #根据式子把所需要的参数的值给求出来
        self.conv1 = Conv2d(3, 32, 5, 1, 2)

        #根据结构图知道最大池化的参数是2
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = MaxPool2d(2)

        #经过Flatten进行数据的展平
        self.flatten = Flatten()

        #Linear 层可以将前一层的输出(可以是特征图、一维特征向量等)进行线性组合,以生成新的特征表示。这有助于网络学习输入数据中的复杂模式。
        #1024是64*4*4
        self.linear1 = Linear(1024, 64)
        self.linear2 = Linear(64, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

sen = Sen()
print(sen)

input = torch.ones((64, 3, 32, 32))
output = sen(input)
print(output.shape)

网络正确输出:
在这里插入图片描述
当我们把self.linear1 = Linear(1024, 64)改写成self.linear1 = Linear(10240, 64),表示代码错误的情况。

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear

class Sen(nn.Module):
    def __init__(self):
        super(Sen,self).__init__()
        #根据式子把所需要的参数的值给求出来
        self.conv1 = Conv2d(3, 32, 5, 1, 2)

        #根据结构图知道最大池化的参数是2
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32, 64, 5, padding=2)
        self.maxpool3 = MaxPool2d(2)

        #经过Flatten进行数据的展平
        self.flatten = Flatten()

        #Linear 层可以将前一层的输出(可以是特征图、一维特征向量等)进行线性组合,以生成新的特征表示。这有助于网络学习输入数据中的复杂模式。
        #1024是64*4*4
        self.linear1 = Linear(10240, 64)
        self.linear2 = Linear(64, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

sen = Sen()
print(sen)

input = torch.ones((64, 3, 32, 32))
output = sen(input)
print(output.shape)

运行结果:
在这里插入图片描述
可以看到报错,说明代码出现了问题。

五、运用Sequential进行代码编写

Sequential其实就相当于汉堡包,把代码都夹在一起,跟compose有点像。
使用了Sequential,看看我们的代码会不会变得更加容易。

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential


class Sen(nn.Module):
    def __init__(self):
        super(Sen,self).__init__()
        self.model1 = Sequential(
            Conv2d(3, 32, 5, 1, 2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self, x):
        x = self.model1(x)
        return x

sen = Sen()
print(sen)
input = torch.ones((64, 3, 32, 32))
output = sen(input)
print(output.shape)

运行结果:
在这里插入图片描述
可以看出运行结果跟上面繁杂写法是一样的。

同样,我们可以进行可视化进行观察

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriter


class Sen(nn.Module):
    def __init__(self):
        super(Sen,self).__init__()
        self.model1 = Sequential(
            Conv2d(3, 32, 5, 1, 2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self, x):
        x = self.model1(x)
        return x

sen = Sen()
print(sen)
input = torch.ones((64, 3, 32, 32))
output = sen(input)
print(output.shape)

writer = SummaryWriter("./logs_seq")
writer.add_graph(sen, input)
writer.close()

运行结果:
在这里插入图片描述

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

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

相关文章

GEE 迭代删除谷歌资产文件夹

在Google Earth Engine (GEE) 中管理大量地理空间数据时,我们可能会遇到需要清理不再需要的资产的情况。但需要提前删除子文件后才可删除文件夹,才可释放存储空间,删除过时的数据。本文将介绍如何在GEE中迭代删除资产文件夹。 代码详解 以下…

3个方法教大家如何在Excel表格中添加水印

在Excel表格中添加水印是一种常见的需求,但是Excel并没有像word文档一样的直接添加水印的功能,怎么办? 今天小编来分享一个方法,也能实现Excel表格的添加水印~ 一、使用文本框插入文字水印 1、插入选项卡 进入excel的操作界面&…

Google大数据架构技术栈

数据存储层 Colossus Colossus作为Google下一代GFS(Google File System)。 GFS本身存在一些不足 单主瓶颈 GFS 依赖单个主节点进行元数据管理,随着数据量和访问请求的增长,出现了可扩展性瓶颈。想象一下,只有一位…

攻防世界 CTF Pwn(一)

前言 攻防世界是一个专注于网络安全的在线学习和竞赛平台,由赛宁网安推出,旨在为网络安全爱好者提供丰富的学习资源和实战竞赛环境。该平台自2018年9月推出以来,已经吸引了超过18万用户注册使用,月活跃用户超过5万。 平台的主要…

BBOT:一款递归型互联网OSINT资源情报工具

关于BBOT BBOT是一款递归型互联网OSINT资源情报工具,该工具深受Spiderfoot项目的启发,旨在自动化侦察、漏洞奖励项目和ASM。 功能介绍 1、支持多个目标 2、网页截图 3、 Web安全测试模块套件 4、由 NLP 提供支持的子域名变异 5、Neo4j 的本机输出&#…

【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)

LeetCode 启动! 每日一题的题解重新开始连载! 题目:预算内的最多机器人数目 题目链接:2398. 预算内的最多机器人数目 题目描述 代码与解题思路 func maximumRobots(chargeTimes []int, runningCosts []int, budget int64) (an…

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用…

【计算机网络】HTTP相关问题与解答

此篇文章内容会不定期更新,仅作为学习过程中的笔记记录 目录 一、HTTP请求和响应报文是怎样的? 1、请求报文 2、响应报文 二、HTTP请求方法有哪些? GET HEAD POST PUT DELETE PATCH OPTIONS TRACE CONNECT 三、GET请求与POST请…

Day 不知道是几|贪心算法part1

贪心算法 贪心算法一般分为如下四步: 将问题分解为若干个子问题 找出适合的贪心策略 求解每一个子问题的最优解 将局部最优解堆叠成全局最优解 这个四步其实过于理论化了,我们平时在做贪心类的题目 很难去按照这四步去思考,真是有点“鸡肋”。…

c++中模版进阶和继承

类型参数非类型模版参数 //类型参数非类型模版参数 template<class T,int N> class Array { public:Array() {} private:T _a[N]; }; int main() {Array<int, 100> a1;return 0; } 注意&#xff1a; 1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的。…

【兼容性记录】video标签在 IOS 和 安卓中的问题

业务需求背景&#xff1a;由于业务中涉及到有视频播放的内容&#xff0c;所以就使用了 video 标签去做&#xff0c;但是 video 标签在 ios 设备和安卓设备中的默认行为不一致&#xff0c;故记录下解决方法&#xff08;折中办法&#xff09;。 ios 自动全屏 ios 设备点击播放视频…

STC分散文件加载

一、什么是分散加载文件&#xff1f; 分散加载文件通常以.sct结尾&#xff0c;英文名是&#xff1a;Linker Control File, scatter loading&#xff0c;链接器根据这个文件的配置来分配各个节区的地址空间&#xff0c;并且生成分散加载代码&#xff0c;因此我们只要修改分散加载…

另一款插件开发中......

欢迎插眼&#xff01;&#xff01;&#xff01; 一款关于源码阅读和笔记记录的插件。发个图&#xff0c;还在开发中......Command Assist的难点是第一次接触IDEA插件&#xff0c;不管是项目工程结构&#xff0c;还是开发发布流程都比较陌生&#xff0c;然后是功能点里面的终端…

编码规范之注释、条件语句中限制代码行数和避免硬编码

对于软件开发管理来说&#xff0c;制订编码规范是一个历久弥新的话题。每一个大有为开发头目&#xff0c;都强调编码规范。或者程序员也互相攻讦&#xff08;jie&#xff0c;第二声&#xff0c;阳平&#xff09;&#xff0c;说你写的代码很乱&#xff0c;不规范&#xff0c;很难…

黑马JavaWeb开发笔记16——请求(postman、简单参数、实体参数、@RequestParam映射)

文章目录 前言一、postman工具1. 引入2. 介绍3. 安装4. 使用 二、简单参数1. 原始方式&#xff08;仅了解&#xff0c;以后的开发不会使用&#xff09;2. SpringBoot方式3. 参数名不一致(RequestParam映射) 三、实体参数1. 简单实体对象2. 复杂实体对象 总结 前言 本篇文章是2…

[CocosCreator]全栈接入微信支付宝SDK(V3)

原文再续,书接上一回!上一期我介绍了接入支付宝的SDK,本文就来讲讲微信的SDK接入.还是那句话,官方的文档,我只能用一句话形容:一言难尽!本屌还是一如既往,把"恶心的东西"嚼碎了喂给各位宝吃. 一.前言 首先还是要集齐可以召唤神龙的法器,给大家一一列举一下: 1.…

python学习第十节:爬虫基于requests库的方法

python学习第十节&#xff1a;爬虫基于requests库的方法 requests模块的作用&#xff1a; 发送http请求&#xff0c;获取响应数据&#xff0c;requests 库是一个原生的 HTTP 库&#xff0c;比 urllib 库更为容易使用。requests 库发送原生的 HTTP 1.1 请求&#xff0c;无需手动…

Notepad++插件:TextFX 去除重复行

目录 一、下载插件 TextFX Characters 二、去重实操 2.1 选中需要去重的文本 2.2 操作插件 2.3 结果展示 2.3.1 点击 Sort lines case sensitive (at column) 2.3.2 点击 Sort lines case insensitive (at column) 一、下载插件 TextFX Characters 点【插件】-【插件管理…

unity编辑器c#脚本

目录 1.编辑器窗口再介绍 1.1添加对象 1.2文件夹的管理 1.3参数的设置 1.4对象的移动方式 2.对于外形和材质的修改 2.1对于外形的修改 2.2对于材质的修改 3.添加有趣的组件 3.1如何添加组件 3.2添加刚体组件 3.3碰撞器的介绍 3.4添加c#组件 3.5c#脚本代码的说明 1…

通过知识蒸馏提升大模型训练效率

人工智能咨询培训老师叶梓 转载标明出处 随着模型规模的不断扩大&#xff0c;如GPT-4这样的模型拥有约1.7万亿参数&#xff0c;其预训练所需的巨大能源和计算资源引发了对可持续发展AI解决方案的迫切需求。麦吉尔大学的研究团队介绍了一种创新的方法来解决与LLMs预训练相关的效…