李沐之使用块的网络VGG

目录

1.VGG

2.代码实现


1.VGG

n层是指可以有N个窗口3*3,填充为1的卷积层。有m个通道,这里输入和输出都是一样的。

VGG就是替换掉AlexNet整个卷积层的架构。

直径大小表示占内存,横坐标表示速度,纵坐标表示精确度。

2.代码实现

import torch 
from torch import nn
fron d2l import torch as d2l"""VGG块"""
#该函数有三个参数,分别对应于卷积层的数量num_convs、输入通道的数量in_channels 
#和输出通道的数量out_channels.
def vgg_block(num_convs,in_channels,out_channels):layers=[]for _ in range(convs):layers.append(nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1))layers.append(nn.ReLU())in_channels=out_channels# in channels=out channels 是为了让除了第一个的in channels外,其他的层的#in都等于outlayers.append(nn.MaxPool2d(kernel_size=2,stride=2))#假如输入为10,(10-2+2)/2=5每经过一个卷积块输出大小都减半。return nn.Sequential(*layers)#nn.Sequential的定义来看,输入要么是orderdict,要么是一系列的模型,遇到list,#必须用*号进行转化,否则会报错"""VGG网络"""
#原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。 
#第一个模块有64个输出通道,每个后续模块将输出通道数量翻倍,直到该数字达到512。
#由于该网络使用8个卷积层和3个全连接层,因此它通常被称为VGG-11。#每一块可以认为是高宽减半。因为有个maxpooling,为什么有5个块呢?因为224除以5次2等于7就除不动了conv_arch=((1,64),(1,128),(2,256),(2,512),(2,512))#下面的代码实现了VGG-11。可以通过在conv_arch上执行for循环来简单实现。
def vgg(conv_arch):conv_blks=[]in_channels=1#卷积部分for(num_convs,out_channels) in conv_arch:conv_blks.append(vgg_block(num_convs,in_channels,out_channels))in_channels=out_channelsreturn nn.Sequential(*conv_blks,nn.Flatten(),#全连接部分nn.Linear(out_channels*7*7,4096),nn.ReLU(),nn.Dropout(0.5),#7*7是因为224除以5次后就变成了7*7nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096,10))net=vgg(conv_arch)#构建一个高度和宽度为224的单通道数据样本,以观察每个层输出的形状。
X=torch.randn(size=(1,1,224,224))
for blk in net:X=blk(X)print(blk.__class__.__name__,'output shape\t',X.shape)
"""结果输出:
Sequential output shape:     torch.Size([1, 64, 112, 112])
Sequential output shape:     torch.Size([1, 128, 56, 56])
Sequential output shape:     torch.Size([1, 256, 28, 28])
Sequential output shape:     torch.Size([1, 512, 14, 14])
Sequential output shape:     torch.Size([1, 512, 7, 7])
Flatten output shape:        torch.Size([1, 25088])
Linear output shape:         torch.Size([1, 4096])
ReLU output shape:   torch.Size([1, 4096])
Dropout output shape:        torch.Size([1, 4096])
Linear output shape:         torch.Size([1, 4096])
ReLU output shape:   torch.Size([1, 4096])
Dropout output shape:        torch.Size([1, 4096])
Linear output shape:         torch.Size([1, 10])"""
#每个块的高度和宽度减半,最终高度和宽度都为7。最后再展平表示,送入全连接层处理。"""训练模型"""
#由于VGG-11比AlexNet计算量更大,因此我们构建了一个通道数较少的网络,足够用于训练
#Fashion-MNIST数据集。
ratio=4
small_conv_arch=[(pair[0],pair[1]//ratio) for pair in conv_arch]
#conv_arch里面的参数就是需要的卷积层数和输出通道,small_conv_arch就是把输出通道数
#除以4
net=vgg(small_conv_arch)lr,num_epochs,batch_size=0.05,10,128
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size,resize=224)
d2l.train_ch6(net,train_iter,test_iter,num_epochs,lr,d2l.try_gpu())
"""结果输出:
loss 0.178, train acc 0.935, test acc 0.920
2463.7 examples/sec on cuda:0"""
#精度比AlexNet有提升

参考:

for _ in range(10)的作用和python的range()函数_for i in range(10)循环几次-CSDN博客

[[] for _ in range(10)]详解 - python-CSDN博客

【python】*号用法 如nn.Sequential(*layers)_nn.sequential里面的*-CSDN博客

Pytorch 容器_torch.cmul已消失-CSDN博客

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

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

相关文章

搭建算法日志自检小系统

&#x1f952; 前言 目前演示的是一个工具&#xff0c;但如此&#xff0c;未来完成有潜力可以演变为一整套系统。 &#x1f451;现场人员自检失败表计点位教程V2.0 NOTE: 如果没有“logfiles-meter-tool“目录的请联系我们进行提供&#xff01; &#x1f447; 进入<dist>…

构建基于RHEL7(CentOS7)的OpenSSH9.5p1的RPM包和升级回退方案

本文适用&#xff1a;RHEL7系列&#xff0c;或同类系统(CentOS7等) 文档形成时期&#xff1a;2023年 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目录 环境准备安装依赖openssh-9.5p1-el7.spec内容构建RPM包下载安装前注意事项开启t…

C语言用函数指针实现计算器

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…

如何在“Microsoft Visual Studio”中使用OpenCV构建应用程序

我在这里描述的所有内容都将应用于 OpenCV 的界面。我首先假设您已经阅读并成功完成了 Windows 中的安装教程。因此&#xff0c;在进一步操作之前&#xff0c;请确保您有一个包含 OpenCV 头文件和二进制文件的 OpenCV 目录&#xff0c;并且您已按照此处所述设置环境变量 设置 O…

养猫家庭怎么挑选宠物空气净化器?猫用空气净化器推荐来了!

宠物空气净化器在近年来越来越受到关注&#xff0c;它们被宣传为解决宠物家庭空气质量问题的神器。然而&#xff0c;一些人认为宠物空气净化器只是商家们利用人们对宠物的爱而推出的一种所谓的“智商税”&#xff0c;那么作为一位养猫多年的铲屎官&#xff0c;我可以说宠物空气…

[windows]一种判断exe是32位还是64位程序简单方法

不用运行&#xff0c;直接查看 exe 文件的兼容性属性。 如果是 32 位的程序&#xff0c;“简化的颜色模式”和“用 640x480 屏幕分辨率运行”是可以勾选的&#xff0c;且兼容模式最低可以调到 Windows 95。 而 64 位的程序&#xff0c;“简化的颜色模式”和“用 640 x 480 屏…

在线项目实习分享:股票价格形态聚类与收益分析

01前置课程 数据挖掘基础数据探索数据预处理数据挖掘算法基础Python数据挖掘编程基础Matplotlib可视化Pyecharts绘图 02师傅带练 行业联动与轮动分析 通过分析申银万国行业交易指数的联动与轮动现象&#xff0c;获得有意义的行业轮动关联规则&#xff0c;并在此基础上设计量…

华云安攻击面发现及管理平台体验

省流&#xff1a; 无需【立即咨询】即可体验&#xff0c;开通即可查看演示数据&#xff0c;公开报价 界面&#xff1a; 界面简洁&#xff0c;要点清晰&#xff0c;可以清晰的看到暴露面及攻击面信息 功能&#xff1a; 资产发现&#xff1a;主域名发现、子域名发现、 IP 发现…

snmp协议配置

引言 SNMP&#xff08;Simple Network Management Protocol&#xff09;是一种网络管理协议&#xff0c;用于管理和监控网络设备、操作系统和应用程序。它提供了一组用于检索和修改网络设备配置、监视设备状态和性能的标准化方法。 SNMP 是一个客户端-服务器协议&#xff0c;…

性能监控软件选择攻略

随着企业对应用程序性能的关注度不断增加&#xff0c;选择适当的性能监控软件变得至关重要。性能监控软件能够帮助企业实时追踪应用程序的性能指标&#xff0c;识别潜在问题并提高系统的稳定性。在选择性能监控软件时&#xff0c;以下攻略将有助于确保您的选择符合业务需求并能…

制造知识普及--MES系统中的调度排产管理

要想弄清楚MES系统调度排产的管理机制&#xff0c;则要首先搞清楚车间调度排产是一套怎样的工作流程&#xff0c;它的难点在什么地方&#xff1f; 生产调度指的是具体组织实现生产作业计划的工作&#xff0c;是对执行生产作业计划过程中发生的问题和可能出现的问题&#xff0c…

代码随想录算法训练营第3天 | 203.移除链表元素 ,707.设计链表 , 206.反转链表

数组理论基础 文章链接&#xff1a;https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 203.移除链表元素 题目链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/ 这种情况下的移除操作&#xff0c;就是让…