vgg16-pytorch

基于pytorch实现VGG16模型

刚听完土哥的入门pytorch,试着写一个不完善的vgg16

VGG16具体的架构:
在这里插入图片描述
VGG16模型构建:

卷积池化后尺寸计算公式:
在这里插入图片描述
在这里插入图片描述
引入库:

from torch import nn
from torch.nn.modules.flatten import Flatten

dilation默认为1,计算第一个卷积的步长和填充:

224 =224+2xpadding-1x(3-1)-1/stride + 1
因为padding和stride都为整数,当padding=1,stride=1时,等式成立。

图片为3通道,输出后维64通道,卷积核为3x3,第一个卷积层为:

nn.Conv2d(in_channels=3,out_channels=64,kernel_size=3,stride=1,padding=1),
# 第二个尺寸不变,步长跟填充不变
nn.Conv2d(64,64,3,1,1),

在第一个池化这里,图片长宽都缩小二倍,当池化核为2x2时,取最显著的一个特征可达到这个标准,因此池化核为2,输入长和宽为224,输出长和宽为112,计算池化的步长

112 =224 + 2*padding - 1x(2-1-1/stride + 1
因为padding和stride都为整数,当padding=0,stride=2时,等式成立。padding默认为0可不写

在这里插入图片描述
因此,池化层为:

nn.MaxPool2d(kernel_size=2,stride=2)

完整模型代码如下:

from torch import nn
from torch.nn.modules.flatten import Flattenclass Vgg16(nn.Module):def __init__(self,category):super(Vgg16,self).__init__()self.model = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=64,kernel_size=3,stride=1,padding=1),nn.Conv2d(64,64,3,1,1),nn.MaxPool2d(kernel_size=2,stride=2),nn.Conv2d(64,128,3,1,1),nn.Conv2d(128,128,3,1,1),nn.MaxPool2d(2,stride=2),nn.Conv2d(128,256,3,1,1),nn.Conv2d(256,256,3,1,1),nn.Conv2d(256,256,3,1,1),nn.MaxPool2d(2,stride=2),nn.Conv2d(256,512,3,1,1),nn.Conv2d(512,512,3,1,1),nn.Conv2d(512,512,3,1,1),nn.MaxPool2d(2,stride=2),nn.Conv2d(512, 512, 3, 1, 1),nn.Conv2d(512, 512, 3, 1, 1),nn.Conv2d(512, 512, 3, 1, 1),nn.MaxPool2d(2, stride=2),Flatten(),nn.Linear(512 * 7 * 7, 4096),nn.Linear(4096,4096),nn.Linear(4096, category))

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

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

相关文章

Redis解决Session共享问题

文章目录 一、集群Session共享问题二、Redis存储验证码和对象三、解决状态登录刷新问题 一、集群Session共享问题 session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务器时导致数据丢失的问题 tomcat可以进行多台tomcat进行…

嵌入式内核及驱动开发高级

一、起源 仅devfs,导致开发不方便以及一些功能难以支持: 热插拔 不支持一些针对所有设备的统一操作(如电源管理) 不能自动mknod 用户查看不了设备信息 设备信息硬编码,导致驱动代码通用性差,即没有分离…

算法与数据结构(二)--【2】链表进阶

一.循环链表 1.单循环链表/循环链表 【1】概念:在单链表中,将终端结点的指针域NULL改为指向第一个结点,就使整个链表形成一个环,这种首尾详解的链表成为循环链表。 【2】特点:从表中任一结点出发均可找到表中其他结点…

某网站提交登陆信息加密JS逆向实战分析

1. 写在前面 对于爬虫开发者来说,职业生涯中可能或多或少会遇到各种各样的网站,其中有些必要要求登陆才能浏览。那么模拟登陆的时候发现提交的登陆信息(用户名、密码)都是经过加密后的,如何处理?这里找到了…

手把手教你如何发布体验

发布工具集:体验中心 体验中心 (Experience Hub) 是发布流程的起点,也是其他工具的可扩展永久中心。从这里你们可以验证每个步骤,以便发布你们的体验: 具有当前状态的可视化任务列表 工具摘要按钮 发布/取消发布按钮 - 自动批…

【雕爷学编程】Arduino动手做(161)---16路PWM舵机驱动板2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

【刷题】在二叉树中分配硬币

在二叉树中分配硬币 https://leetcode.cn/problems/distribute-coins-in-binary-tree/description/ 描述 给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币。 在一次移动中,我们…

Unity DOTS纯ECS实现虚拟摇杆Joystick控制角色移动

上篇已经实现了ECS框架下的IBeginDragHandler、IDragHandler、IEndDragHandler这几个拖动事件,使得可以任意给ECS框架下的UI(2D entity)响应拖动事件。本篇分享下在前篇实现的功能的基础上再实现一个常用的摇杆控制角色移动的功能。 需要注意的一点,目前…

如何从一个仪表盘管理多个WordPress网站?

您是否正在寻找一种管理多个WordPress网站的简单方法? 监控多个网站并使其保持更新可能非常耗时。 幸运的是,有几种 WordPress 管理工具可以让您从单个仪表板管理多个 WordPress 网站变得非常容易。这将帮助您节省大量时间,同时使所有 Word…

Android复杂UI的性能优化实践 - PTQBookPageView 性能优化记录

作者:彭泰强 1 评价指标&优化成果 要做性能优化,首先得知道性能怎么度量、怎么表示。因为性能是一个很抽象的词,我们必须把它量化、可视化。那么,因为是UI组件优化,我首先选用了GPU呈现模式分析这一工具。 在手机…

如何应对ChatGPT这一波AI浪潮

最近我在写一系列文章,其中包括《ChatGPT 实战系列》和《WPS Office AI实战系列》。想通过这些文章提供实践指导,既自己动手实践了,也能与大家分享我的实践结果,这是一个学习的过程。在实践过程中,我发现有些实用的方面…

7.kafka+ELK连接

文章目录 kafkaELK连接部署Kafkakafka操作命令kafka架构深入FilebeatKafkaELK连接 kafkaELK连接 部署Kafka ###关闭防火墙systemctl stop firewalld systemctl disable firewalldsetenforce 0vim /etc/selinux/configSELINUXdisabled###下载安装包官方下载地址:ht…