P21_神经网络——搭建小实战和Sequential的使用

news/2025/11/22 10:42:30/文章来源:https://www.cnblogs.com/Samar-blog/p/19255692

P21_神经网络——搭建小实战和Sequential的使用

21.1打开pytorch官网

1.神经网络-搭建小实战和Sequential的使用

(1)Sequential的使用:将网络结构放入其中即可,可以简化代码。
(2)一个对CIFAR10进行分类的模型

P21_CIFAR10模型结构

(3)模型的实现(下文)

21.2打开pycharm实现模型

1.第一步的Convolution

(1)在第一步的Convolution:in_channel是3,out_channel是32,kernel_size是5×5
(2)Conv2d的参数:
点击查看代码
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

其中in_channel、out_channel和kernel_size已知,至于stride|padding|dilation是否要设置还是默认,要根据计算得知;

(3)根据Conv2d的计算公式和上图的对CIFAR10进行分类的模型来计算:

P21_Conv2d的计算公式

①NCHW是指一种张量数据的存储格式,具体表示为N(批大小)-C(通道数)-H(高度)-W(宽度)

②在公式中可知:

Hin=32,Hout=32,dilation默认是1,stride默认是1,padding默认是0

③则32=(32+2*padding-dilation×(5-1)-1)/stride +1

设置dilation为默认值1,stride设置为默认值1,则代入得:32=(32+2×padding-1×(5-1)-1)/1+1即padding=2

④即:
self.conv1 = Conv2d(in_channels=3,out_channels=32,kernel_size=5,padding=2)#stride和dilation默认

2.第二步的Maxpooling

self.maxpool1 = MaxPool2d(kernel_size=2)

3.第三步的Convolution

self.conv2 = Conv2d(32,32,5,padding=2)

4.第四步的Maxpooling

self.maxpool2 = MaxPool2d(kernel_size=2)

5.第五步的Convolution

self.conv3 = Conv2d(32,64,5, padding=2)

6.第六步的Maxpooling

self.maxpool3 = MaxPool2d(kernel_size=2)

7.第七步的Flatten

self.flatten = Flatten()

8.第八步的linear

self.linear1 = Linear(1024,64)

9.第九步的linear

self.linear2 = Linear(64,10)

linear示意图:
P21_线性层1和2

10.定义forward

点击查看代码
    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

11.搭建网络,实例化并print输出

点击查看代码
dyl_seq = DYL_seq()
print(dyl_seq)

得到:

点击查看代码
x DYL_seq(  (conv1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))  (maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)  (conv2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))  (maxpool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)  (conv3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))  (maxpool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)  (flatten): Flatten(start_dim=1, end_dim=-1)  (linear1): Linear(in_features=1024, out_features=64, bias=True)  (linear2): Linear(in_features=64, out_features=10, bias=True))

12.创建输入,使用ones指定我们想要创建的形状大小

创建一个假想的输入:

torch.ones(64,3,32,32) #64个batch_size,3个通道,32×32的尺寸
点击查看代码
#torch.ones可以指定我们想要创建的数的形状大小
input = torch.ones(64,3,32,32) #64个batch_size,3个通道,32×32的尺寸
output = dyl_seq(input)
print(output.shape)
输出为: `torch.Size([64, 10])`

其中64表示64个batch_size,可以想象成64张图片

21.3使用Sequential实现模型

1.原始繁琐的代码:

点击查看代码
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass DYL_seq(nn.Module):def __init__(self):super(DYL_seq, self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=32,kernel_size=5,padding=2)#stride和dilation默认self.maxpool1 = MaxPool2d(kernel_size=2)self.conv2 = Conv2d(32,32,5,padding=2)self.maxpool2 = MaxPool2d(kernel_size=2)self.conv3 = Conv2d(32,64,5, padding=2)self.maxpool3 = MaxPool2d(kernel_size=2)self.flatten = Flatten()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 xdyl_seq = DYL_seq()
print(dyl_seq)#创建一个假想的输入
#torch.ones可以指定我们想要创建的数的形状大小
input = torch.ones(64,3,32,32) #64个batch_size,3个通道,32×32的尺寸
output = dyl_seq(input)
print(output.shape)

输出结果如下:

点击查看代码
DYL_seq((conv1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(flatten): Flatten(start_dim=1, end_dim=-1)(linear1): Linear(in_features=1024, out_features=64, bias=True)(linear2): Linear(in_features=64, out_features=10, bias=True)
)
torch.Size([64, 10])

2.使用Sequential对模型重新进行实现

点击查看代码
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequentialclass DYL_seq(nn.Module):def __init__(self):super(DYL_seq, self).__init__()self.model1 = Sequential(Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),MaxPool2d(kernel_size=2),Conv2d(32, 32, 5, padding=2),MaxPool2d(kernel_size=2),Conv2d(32, 64, 5, padding=2),MaxPool2d(kernel_size=2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self,x):x = self.model1(x)return x
dyl_seq = DYL_seq()
print(dyl_seq)#创建一个假想的输入
#torch.ones可以指定我们想要创建的数的形状大小
input = torch.ones(64,3,32,32) #64个batch_size,3个通道,32×32的尺寸
output = dyl_seq(input)
print(output.shape)

实现了如上同样的效果:

点击查看代码
xxxxxxxxxx DYL_seq(  (model1): Sequential(    (0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))    (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)    (2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)    (4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))    (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)    (6): Flatten(start_dim=1, end_dim=-1)    (7): Linear(in_features=1024, out_features=64, bias=True)    (8): Linear(in_features=64, out_features=10, bias=True)  ))torch.Size([64, 10])

可见,代码变得简洁很多

21.4使用tensorboard进行可视化

tensorboard --logdir=dyl_seq
双击dyl_seq就会得到中间有一个Sequential,再双击Sequential就可以看到各网络层:

P21_tensorboard输出结果

然后在网络层继续双击,就可以看到:
每个箭头上显示的我们送到该网络层的尺寸的大小,设置的各参数:

P21_tensorboard——双击linear7
P21_tensorboard输出结果2

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

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

相关文章

2025 最新工业检测公司排行榜权威发布:CMA 资质 + 中高级职称团队护航,厂房 / 钢结构 / 危房检测最新推荐

引言 随着工业建筑存量规模持续扩大,建筑安全检测与功能升级需求愈发迫切,工业检测已成为保障建筑全生命周期安全的核心环节。据国际检测与认证协会(ICTA)最新测评数据显示,全球工业检测市场年增速达 13.1%,但行…

vue3 随机生产音符扩散效果

1 <template>2 <div class="container">3 <div class="flower-center"></div>4 <div 5 class="note-petal"6 v-for="note in a…

ASM1042A3S车规级CANFD芯片在两轮车和平衡车控制器优秀的方案中的技术应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025抚州一对一辅导测评排行榜:高性价比平台推荐,提分效果实测

在临川、东乡、南城、南丰、崇仁、乐安、金溪、黎川、宜黄、资溪、广昌11县(区)及高新区、东临新区2个功能区,家长们正被相似的教育焦虑困扰:孩子数学压轴题卡壳、英语听力频繁丢分,语文阅读理解抓不住得分点,理…

Linux中: 一个服务器上运行多个Redis服务,应该保证哪些配置不一致

Linux中: "一个服务器上运行多个Redis服务,应该保证哪些配置不一致"在同一台服务器上运行多个 Redis 实例时,需要确保每个实例具有独立且不冲突的配置。重点需要保证以下四个配置不冲突:监听的端口指定的…

青岛市一对一教育机构推荐,2026课外家教补习机构权威排行榜

"老师教学质量参差不齐怎么办?""课程费用到底值不值?""万一效果不好能退费吗?"这三个核心问题,正困扰着市南、市北、李沧、崂山、城阳、西海岸新区、即墨、胶州、平度、莱西等地的众…

AI元人文:首论客观值的表征

AI元人文:首论客观值的表征 —— 构建人机价值对齐的工程基石 摘要: 本文立足于“AI元人文”理论框架,首次系统性地论述其核心工程要素——“客观值”的表征问题。文章首先阐释了为何该问题在理论雏形阶段后才成为焦…

2025吉安市一对一辅导测评排行榜:高性价比平台权威推荐

一、开篇:吉安家长的辅导困境与测评背景 在吉安,无论是吉州区、青原区的城区家庭,还是吉安县、泰和县、永丰县、遂川县、万安县、安福县、永新县、峡江县、新干县的乡镇家庭,都绕不开孩子的学科辅导难题。数学函数…

2025年别墅供暖厂家权威推荐榜单:别墅锅炉/联排别墅供暖/小别墅供暖源头厂家精选

在高端分户采暖需求日益增长的今天,别墅供暖系统正朝着高效节能、智能控制与个性化定制的方向快速发展。 别墅供暖市场近年来呈现出年均12%以上的稳定增长,高端住宅对分户采暖系统的需求持续攀升。随着"双碳&qu…

面向对象第一次大作业 - nanqiu

一、前言 1. 核心知识点 三次pta大作业围绕电梯调度展开,核心知识点逐渐深入:基础语法:从简单的输入输出、条件判断、循环,到枚举(enum)、类与对象的使用。 数据结构:用到了链表(LinkedList)存储请求队列,哈…

2025年11月央国企求职机构选择指南:权威榜单与避坑要点

随着就业市场竞争日益激烈,越来越多的求职者将目光投向稳定性强、福利体系完善的央国企单位。2025年,央国企招聘规模持续扩大,但求职者面临信息不对称、招聘流程复杂、竞争激烈等现实挑战。根据教育部数据显示,202…

济南市一对一培训机构排行榜:权威榜单发布2026年综合评分前十强机构推荐

在济南,从历下区、市中区的教育高地,到槐荫区、天桥区的资源聚集地,再到历城区、长清区、章丘区、济阳区、莱芜区、钢城区、平阴县、商河县的广大家庭,每一位重视教育的家长,或许都曾在深夜自问:“投入了不菲的学…

2025年高浮雕优质厂家权威推荐榜单:石浮雕/大理石浮雕/中式石浮雕源头厂家精选

在公共艺术与建筑装饰需求持续增长的今天,高浮雕作品以其独特的立体感和艺术表现力,成为众多市政工程、商业空间与文旅项目的焦点。 高浮雕作为一种兼具艺术性与实用性的石材加工产品,近年来市场规模持续扩大。行业…

2025 年 11 月预制袋套袋机,袋中袋套袋机,食品套袋机,八边封套袋机最新推荐,产能、专利、环保三维数据透视!

引言 在全球包装行业自动化升级的趋势下,食品套袋机与八边封套袋机作为关键包装设备,其产能效率、专利技术应用与环保性能直接决定企业生产竞争力。据国际包装机械协会(IPMA)最新测评数据显示,全球优质套袋机品牌…

2025 年 11 月侧推式套袋机,卧式套袋机,M型袋套袋机最新推荐,产能、专利、环保三维数据透视!

引言 在全球包装设备智能化升级的浪潮中,卧式套袋机与 M 型袋套袋机作为后道包装的核心设备,其产能效率、专利技术应用与环保性能直接决定企业生产竞争力。据国际包装机械协会(IPMA)最新测评数据显示,全球该类设备…

AT AGC005 题解

AT AGC005 EditorialA 栈维护括号匹配,\(S \to (, T \to )\)。 #include <bits/stdc++.h>using i64 = long long;void solve() {std::string s;std::cin >> s;std::stack<char> stc;for (auto i : …

Spring Security-PasswordEncoder密码解析器详解和自定义登录逻辑

在Spring Security中,BCryptPasswordEncoder是一个非常强大的工具,用于对密码进行加密,以确保存储的密码的安全性。 BCrypt是一种基于Blowfish密码哈希函数的加密算法,专门设计为防止通过彩虹表攻击和暴力破解等常…

2025 胶管厂家最新推荐排行榜:耐高压 35MPa / 热熔 / 特种工况优质品牌精选矿用/大口径吸排泥/低压/耐高温/钢丝编制/输油胶管公司推荐

引言 在工业生产、石油钻探、工程机械等核心领域,胶管作为流体输送关键部件,其耐压性、耐腐蚀性与适配性直接决定生产安全与效率。据国际流体输送设备协会(IFTA)最新测评数据显示,全球胶管市场不合格产品发生率达…

2025 装盒机厂家最新推荐排行榜:全自动 / 食品 / 纸巾 / 卫生巾装盒机权威测评,技术创新与整线配套能力

引言 在全球包装工业智能化升级的浪潮中,装盒机作为后道包装核心设备,其性能稳定性、智能化水平与整线适配能力直接决定生产效率与产品品质。当前市场品牌繁杂,设备质量差异显著,诸多企业面临产能不足、人工成本高…

模板进阶:从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …