十二、Sequential

一、Sequential介绍

torch.nn.Sequential(*args)
在这里插入图片描述
由官网给的Example可以大概了解到Sequential是将多层网络进行便捷整合,方便可视化以及简化网络复杂性

二、复现网络模型训练CIFAR-10数据集

在这里插入图片描述
这里面有个Hidden units隐藏单元其实就是连个线性层
把隐藏层全部展开整个神经网络架构如下:
在这里插入图片描述

①输入图像为3通道的(32,32)图像,(C,H,W)=(3,32,32)

在这里插入图片描述

②通过一层(5,5)的卷积Convolution,输出特征图为(32,32,32),特征图的(H,W),通过(5,5)的卷积核大小没有发生变换,这说明卷积层肯定对原始图像进行了加边

在这里插入图片描述

查看下官网给的卷积层padding的计算公式
在这里插入图片描述
分析一下:
在这里插入图片描述
故padding = 2,加了两成外边,之所以channel由3变成了32,是因为卷积核有多个并非一个卷积核
最终:输入3通道;输出32通道;stride = 1;padding = 2;dilation = 1(默认值);kernel_size = 5;
torch.nn.Conv2d(in_channels=3,out_channels=32,kernel_size=5,stride=1,padding=2)

③接着将(32,32,32)特征通过Max-Pooling,池化核为(2,2),输出为(32,16,16)的特征图

在这里插入图片描述
torch.nn.MaxPool2d(kernel_size=2)

④接着将(32,16,16)特征图通过(5,5)大小的卷积核进行卷积,输出特征图为(32,16,16),特征图的(H,W),通过(5,5)的卷积核大小没有发生变换,这说明卷积层肯定对原始图像进行了加边

在这里插入图片描述

同理根据官网给的计算公式可以求出padding = 2

在这里插入图片描述
通过上面两次的计算可以看出,只要通过卷积核大小为(5,5),卷积之后的大小不变则padding肯定为2

故padding = 2,加了两成外边,这里channel由32变成了32,可以得知仅使用了一个卷积核
最终:输入32通道;输出32通道;stride = 1;padding = 2;dilation = 1(默认值);kernel_size = 5;
torch.nn.Conv2d(in_channels=32,out_channels=32,kernel_size=5,stride=1,padding=2)

⑤接着将(32,16,16)的特征图通过Max-Pooling,池化核为(2,2),输出为(32,8,8)的特征图

在这里插入图片描述
torch.nn.MaxPool2d(kernel_size=2)

⑥再将(32,8,8)的特征图输入到卷积核为(5,5)的卷积层中,得到(64,8,8)特征图,特征图的(H,W),通过(5,5)的卷积核大小没有发生变换,这说明卷积层肯定对原始图像进行了加边,由前两次的计算得出的结果可以得知padding=2,这里channel由32变成了64,是因为使用了多个卷积核分别进行卷积

在这里插入图片描述
torch.nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2)

⑦再将(64,8,8)的特征图通过Max-Pooling,池化核为(2,2),输出为(64,4,4)的特征图

在这里插入图片描述
torch.nn.MaxPool2d(kernel_size=2)

⑧再将(64,4,4)的特征图进行Flatten展平成(1024)特征

torch.nn.Flatten()
在这里插入图片描述

⑨再将(1024)特征传入第一个Linear层,输出(64)

在这里插入图片描述
torch.nn.Linear(1024,64)

⑩最后将(64)特征图经过第二个Linear层,输出(10),从而达到CIFAR-10数据集的10分类任务

在这里插入图片描述
torch.nn.Linear(64,10)

三、传统神经网络实现

import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriterclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.conv_1 = torch.nn.Conv2d(in_channels=3,out_channels=32,kernel_size=5,stride=1,padding=2)self.maxpool_1 = torch.nn.MaxPool2d(kernel_size=2)self.conv_2 = torch.nn.Conv2d(in_channels=32,out_channels=32,kernel_size=5,stride=1,padding=2)self.maxpool_2 = torch.nn.MaxPool2d(kernel_size=2)self.conv_3 = torch.nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2)self.maxpool_3 = torch.nn.MaxPool2d(kernel_size=2)self.flatten = torch.nn.Flatten()self.linear_1 = torch.nn.Linear(1024,64)self.linear_2 = torch.nn.Linear(64,10)def forward(self,x):x = self.conv_1(x)x = self.maxpool_1(x)x = self.conv_2(x)x = self.maxpool_2(x)x = self.conv_3(x)x = self.maxpool_3(x)x = self.flatten(x)x = self.linear_1(x)x = self.linear_2(x)return xbeyond = Beyond()
print(beyond)
"""
Beyond((conv_1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool_1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv_2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool_2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv_3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool_3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(flatten): Flatten(start_dim=1, end_dim=-1)(linear_1): Linear(in_features=1024, out_features=64, bias=True)(linear_2): Linear(in_features=64, out_features=10, bias=True)
)
"""input = torch.zeros((64,3,32,32))
print(input.shape)#torch.Size([64, 3, 32, 32])
output = beyond(input)
print(output.shape)#torch.Size([64, 10])#将网络图上传值tensorboard中进行可视化展示
writer = SummaryWriter("y_log")
writer.add_graph(beyond,input)
writer.close()

在Terminal下运行tensorboard --logdir=y_log --port=7870,logdir为打开事件文件的路径,port为指定端口打开;
通过指定端口2312进行打开tensorboard,若不设置port参数,默认通过6006端口进行打开。

在这里插入图片描述

在这里插入图片描述

四、使用Sequential实现神经网络

import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriterclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.model = torch.nn.Sequential(torch.nn.Conv2d(3,32,5,padding=2),torch.nn.MaxPool2d(2),torch.nn.Conv2d(32,32,5,padding=2),torch.nn.MaxPool2d(2),torch.nn.Conv2d(32,64,5,padding=2),torch.nn.MaxPool2d(2),torch.nn.Flatten(),torch.nn.Linear(1024,64),torch.nn.Linear(64,10))def forward(self,x):x = self.model(x)return xbeyond = Beyond()
print(beyond)
"""
Beyond((conv_1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool_1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv_2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool_2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv_3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool_3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(flatten): Flatten(start_dim=1, end_dim=-1)(linear_1): Linear(in_features=1024, out_features=64, bias=True)(linear_2): Linear(in_features=64, out_features=10, bias=True)
)
"""input = torch.zeros((64,3,32,32))
print(input.shape)#torch.Size([64, 3, 32, 32])
output = beyond(input)
print(output.shape)#torch.Size([64, 10])#将网络图上传值tensorboard中进行可视化展示
writer = SummaryWriter("y_log")
writer.add_graph(beyond,input)
writer.close()

在Terminal下运行tensorboard --logdir=y_log --port=7870,logdir为打开事件文件的路径,port为指定端口打开;
通过指定端口2312进行打开tensorboard,若不设置port参数,默认通过6006端口进行打开。

在这里插入图片描述

在这里插入图片描述

实现效果是完全一样的,使用Sequential看起来更加简介,可视化效果更好些。

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

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

相关文章

社交问答:取代BBS的Web2.0革命

编者按:本文由乐维UP创始人俞越撰写,你也可以点击这里关注俞越的新浪微博。 BBS在中国的兴起是在95年,之后以惊人的速度发展起来。从2011年开始,国内的问答社区也如当年的BBS一样,大量涌现快速成长,大体分为…

单调栈 leetcode整理(三)

目录42. 接雨水思路分析901. 股票价格跨度思路581. 最短无序连续子数组思路一:排序双指针思路二:单调栈思路三:双指针(最省时)42. 接雨水 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子&…

python 抠图 锯齿_Python | 绘图中的抗锯齿

python 抠图 锯齿Antialiasing is another important feature of Matplotlib and in this article, we will review how to use this functionality. pyplot.antialiased() is an inbuilt function in matplotlib.pyplot which performs our required operation. 抗锯齿是Matpl…

apk 反编译

引用:http://code.google.com/p/dex2jar/issues/detail?id20 最新版:dex2jar http://code.google.com/p/dex2jar/downloads/list 错误:http://code.google.com/p/dex2jar/issues/detail?id20 这段时间在学Android应用开发,在想既然是用Jav…

OpenDiscussion_DataDrivenDesign

本文源于公司内部技术交流,如有不当之处,还请指正。 Content: 1. What is Data-driven design?2. WPF revolution.3. More about ObservableCollection.4. Question.1. What is Data-driven design?Data-driven design: is a design of usi…

十三、Loss Functions

一、Loss Functions损失函数 损失函数的作用: 1,损失函数就是实际输出值和目标值之间的差 2,由这个差便可以通过反向传播对之后的数据进行更新 Loss Functions官网给的API 里面由很多种损失函数,不同的损失函数有其不同的用途及表…

linux命令行界面_Linux中的命令行界面

linux命令行界面If you are like most people, you are probably most familiar with using a Graphical User Interface (GUI) to control your computer. Introduced to the masses by Apple on the Macintosh computer and popularized by Microsoft, a GUI provides an eas…

十四、OPTIM

一、torch.optim torch.optim.Optimizer(params, defaults)优化器官网说明 由官网给的使用说明打开看出来优化器实验步骤: ①构造选择优化器 例如采用随机梯度下降优化器SGD torch.optim.SGD(beyond.parameters(),lr0.01),放入beyond模型的参数param…

leetcode 滑动窗口小结 (二)

目录424. 替换后的最长重复字符思考分析1优化1004. 最大连续1的个数 III友情提醒方法1,基于当前最大频数方法2,基于历史最大频数424. 替换后的最长重复字符 https://leetcode-cn.com/problems/longest-repeating-character-replacement/ 给你一个仅由大…

十五、修改VGG16网络来适应自己的需求

一、VGG-16 VGG-16神经网络是所训练的数据集为ImageNet ImageNet数据集中验证集和测试集一万五千张,有一千个类别 二、加载VGG-16神经网络模型 VGG16模型使用说明 torchvision.models.vgg16(pretrainedFalse) 其中参数pretrained表示是否下载已经通过ImageNet数…

十六、保存和加载自己所搭建的网络模型

一、保存自己搭建的模型方法一 例如:基于VGG16网络模型架构的基础上加上了一层线性层,最后的输出为10类 torch.save(objmodule,f"path"),传入需要保存的模型名称以及要保存的路径位置 保存模型结构和模型的参数,保存文…

uC/OS-II OS_TASK.C中有关任务管理的函数

函数大致用途 OS_TASK.C是uC/OS-II有关任务管理的文件,它定义了一些函数:建立任务、删除任务、改变任务的优先级、挂起和恢复任务,以及获取有关任务的信息。 函数用途OSTaskCreate()建立任务OSTaskCreateExt()扩展建立任务OSTaskStkChk()堆…

Scala中的do ... while循环

做...在Scala循环 (do...while loop in Scala) do...while loop in Scala is used to run a block of code multiple numbers of time. The number of executions is defined by an exit condition. If this condition is TRUE the code will run otherwise it runs the first …

十七、完整神经网络模型训练步骤

以CIFAR-10数据集为例,训练自己搭建的神经网络模型架构 一、准备CIFAR-10数据集 CIFAR10官网使用文档 torchvision.datasets.CIFAR10(root"./CIFAR_10",trainTrue,downloadTrue) 参数描述root字符串,指明要下载到的位置,或已有数…

μC/OS-Ⅱ 操作系统内核知识

目录μC/OS-Ⅱ任务调度1.任务控制块2.任务管理3.任务状态μC/OS-Ⅱ时间管理μC/OS-Ⅱ内存管理内存控制块MCBμC/OS-Ⅱ任务通信1.事件2.事件控制块ECB3.信号量4.邮箱5.消息队列操作系统内核:在多任务系统中,提供任务调度与切换、中断服务 操作系统内核为每…

第二版tapout

先说说上次流回来的芯片的测试情况。 4月23日, 芯片采用裸片直接切片, bond在板子上,外面加了一个小塑料壳来保护,我们就直接拿回来测试了。 测试的主要分为模拟和数字两部分, 数字部分的模块基本都工作正常&#xff0…

十八、完整神经网络模型验证步骤

网络训练好了,需要提供输入进行验证网络模型训练的效果 一、加载测试数据 创建python测试文件,beyond_test.py 保存在dataset文件夹下a文件夹里的1.jpg小狗图片 二、读取测试图片,重新设置模型所规定的大小(32,32),并转为tens…

二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)

目录二分法细节1、leetcode 34 在排序数组中查找元素的第一个和最后一个位置2、不完全有序下的二分查找(leetcode33. 搜索旋转排序数组)3、含重复元素的不完全有序下的二分查找(81. 搜索旋转排序数组 II)3、不完全有序下的找最小元素(153. 寻找旋转排序数组中的最小值)4、二维矩…

ID3D11DeviceContext::Dispatch与numthread笔记

假定——[numthreads(TX, TY, TZ)] // 线程组尺寸。既线程组内有多少个线程。Dispatch(GX, GY, GZ); // 线程组的数量。既有多少个线程组。 那么——SV_GroupThreadID{iTX, iTY, iTZ} // 【线程组内的】线程3D编号SV_GroupID{iGX, iGY, iGZ} // 线程组的3D编号SV_DispatchT…

小米手环6解决天气未同步问题

最近我发现了我的米6手环天气不同步,打开Zepp Life刷新同步也不行,后来我找了一些网上的解决方法,尝试了一些也还不行,我这人喜欢瞎捣鼓,无意之间给整好了,后来我开始总结自己操作步骤,就在刚才…