pytorh学习笔记——cifar10(三)模仿VGGNet创建卷积网络

        VGG16是由牛津大学视觉几何组(Visual Geometry Group)提出的一种深度卷积神经网络模型。

        VGGNet 探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了 16~19 层深的卷积神经网络,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG 仍然被用来提取图像特征。

        对VGGNet的介绍,这篇文章很优秀:大话CNN经典模型:VGGNet - OSCHINA - 中文开源技术交流社区

        部分摘抄:

        VGGNet的网络结构:
        下图是来自论文《Very Deep Convolutional Networks for Large-Scale Image Recognition》(基于甚深层卷积网络的大规模图像识别)的 VGG 网络结构,正是在这篇论文中提出了 VGG,如下图:

        在这篇论文中分别使用了 A、A-LRN、B、C、D、E 这 6 种网络结构进行测试,这 6 种网络结构相似,都是由 5 层卷积层、3 层全连接层组成,其中区别在于每个卷积层的子层数量不同,从 A 至 E 依次增加(子层数量从 1 到 4),总的网络深度从 11 层到 19 层(添加的层以粗体显示),表格中的卷积层参数表示为 “conv〈感受野大小〉- 通道数〉”,例如 con3-128,表示使用 3x3 的卷积核,通道数为 128。为了简洁起见,在表格中不显示 ReLU 激活功能。
其中,网络结构 D 就是著名的 VGG16,网络结构 E 就是著名的 VGG19。

        以网络结构 D(VGG16)为例,介绍其处理过程如下,请对比上面的表格和下方这张图,留意图中的数字变化,有助于理解 VGG16 的处理过程:

1 、输入 224x224x3 的图片,经 64 个 3x3 的卷积核作两次卷积 + ReLU,卷积后的尺寸变为 224x224x64
2、作 max pooling(最大化池化),池化单元尺寸为 2x2(效果为图像尺寸减半),池化后的尺寸变为 112x112x64
3、经 128 个 3x3 的卷积核作两次卷积 + ReLU,尺寸变为 112x112x128
4、作 2x2 的 max pooling 池化,尺寸变为 56x56x128
5、经 256 个 3x3 的卷积核作三次卷积 + ReLU,尺寸变为 56x56x256
6、作 2x2 的 max pooling 池化,尺寸变为 28x28x256
7、经 512 个 3x3 的卷积核作三次卷积 + ReLU,尺寸变为 28x28x512
8、作 2x2 的 max pooling 池化,尺寸变为 14x14x512
9、经 512 个 3x3 的卷积核作三次卷积 + ReLU,尺寸变为 14x14x512
10、作 2x2 的 max pooling 池化,尺寸变为 7x7x512
11、与两层 1x1x4096,一层 1x1x1000 进行全连接 + ReLU(共三层)
12、通过 softmax 输出 1000 个预测结果

其简化图如下(以 VGG16 为例): 

代码实现:新建vggNet.py

import torch
import torch.nn as nn
import torch.nn.functional as F


class VGGbase(nn.Module):
    def __init__(self, num_classes=10):
        super(VGGbase, self).__init__()
        self.conv1 = nn.Sequential(  # 定义第1个卷积层
            # Sequential 是一个容器,它可以包含一系列的神经网络层(layers),并按顺序执行它们。具体来说,
            # nn.Sequential( 允许您将多个层定义为一个整体,这个整体可以被视为一个单独的层。
            # 当您向神经网络传递数据时,数据会依次通过 Sequential 中定义的每一层。
            # 这种方式简化了网络结构的定义和理解,尤其是在构建较为复杂的网络时。
            nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),  # 输入通道为3,输出通道为64,卷积核大小为3x3,步长为1,填充为1
            nn.BatchNorm2d(64),  # 批量归一化
            # nn.BatchNorm2d 表示对二维输入进行批量归一化,参数 64 通常代表输入特征的通道数。批量归一化的作用是在神经网络训练过程中,对每一批次的数据进行归一化处理,
            # 使得数据的分布更加稳定,有助于加速训练过程、提高模型的泛化能力。
            nn.ReLU()  # 激活函数
        )
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)  # 最大池化,池化核大小为2x2,步长为2
        # 经过第一层卷积后,图像的尺寸为 16x16,通道数为64

        self.conv2_1 = nn.Sequential(  # 定义第2个卷积层的第一次卷积
            nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),  # 输入通道为64,输出通道为128,卷积核大小为3x3,步长为1,填充为1
            nn.BatchNorm2d(128),  # 批量归一化
            nn.ReLU()  # 激活函数
        )

        self.conv2_2 = nn.Sequential(  # 定义第2个卷积层的第二次卷积
            nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1),  # 输入通道为64,输出通道为128,卷积核大小为3x3,步长为1,填充为1
            nn.BatchNorm2d(128),  # 批量归一化
            nn.ReLU()  # 激活函数
        )
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)  # 最大池化,池化核大小为2x2,步长为2
        # 经过第二层卷积后,图像的尺寸为 8x8,通道数为128

        self.conv3_1 = nn.Sequential(  # 定义第3个卷积层的第一次卷积
            nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),  # 输入通道为64,输出通道为128,卷积核大小为3x3,步长为1,填充为1
            nn.BatchNorm2d(256),  # 批量归一化
            nn.ReLU()  # 激活函数
        )

        self.conv3_2 = nn.Sequential(  # 定义第3个卷积层的第二次卷积
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(256),  # 批量归一化
            nn.ReLU()  # 激活函数
        )
        self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
        # 经过第三层卷积后,图像的尺寸为 4x4,通道数为256

        self.conv4_1 = nn.Sequential(  # 定义第4个卷积层的第一次卷积
            nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(512),  # 批量归一化
            nn.ReLU()  # 激活函数
        )

        self.conv4_2 = nn.Sequential(  # 定义第4个卷积层的第二次卷积
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(512),  # 批量归一化
            nn.ReLU()  # 激活函数
        )
        self.pool4 = nn.MaxPool2d(kernel_size=2, stride=2)  # 最大池化,池化核大小为2x2,步长为2
        # 经过第四层卷积后,图像的尺寸为 2x2,通道数为512

        self.fc = nn.Linear(512 * 4, num_classes)  # 全连接层,输入为512*4,输出为10

    def forward(self, x):   # 定义前向传播过程
        batch_size = x.size(0)  # 获取输入的batch_size
        x = self.conv1(x)  # 第1个卷积层
        x = self.pool1(x)  # 第1个池化层

        x = self.conv2_1(x)  # 第2个卷积层
        x = self.conv2_2(x)  # 第2个卷积层
        x = self.pool2(x)  # 第2个池化层

        x = self.conv3_1(x)  # 第3个卷积层
        x = self.conv3_2(x)  # 第3个卷积层
        x = self.pool3(x)  # 第3个池化层

        x = self.conv4_1(x)  # 第4个卷积层
        x = self.conv4_2(x)  # 第4个卷积层
        x = self.pool4(x)  # 第4个池化层

        x = x.view(batch_size, -1)  # 将图片展开成一行,-1表示自动计算这一维的大小

        x = self.fc(x)   # 全连接层
        output = F.log_softmax(x, dim=1)  # 对输出进行log_softmax处理

        return output


def VGGNet():  # 定义网络结构的应用函数
    return VGGbase()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

反转链表 K个一组翻转链表

目录 LeetCode206 反转链表 LeetCode92 反转链表II LeetCode25 K个一组翻转链表 LeetCode206 反转链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x)…

poisson过程——随机模拟(Python和R实现)

Python实现 exponential()使用,自动poisson过程实现。 import numpy as np import matplotlib.pyplot as plt# Parameters lambda_rate 5 # rate parameter (events per time unit) T 10 # total time# Generate Poisson process times np.random.exponential(…

PCL 点云配准 Trimed-ICP算法(精配准

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 perform_standard_icp 函数 2.1.2 perform_trimmed_icp 函数 2.1.3 visualize_registration 函数 2.2完整代码 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算…

软件设计模式------简单工厂模式

简单工厂模式(Simple factory Pattern),又称静态工厂方法(Static Factory Method),属于创新型模式,但它不属于GoF23个设计模式其一。 一、模式动机: 有时需要创建一些来自相同父类的类的实例。 二、定义&#xff1a…

(二十)、从宿主机访问 k8s(minikube) 发布的 redis 服务

文章目录 1、环境准备2、具体操作2.1、启动 minikube (start/stop)2.2、准备 redis-deployment.yaml2.3、执行 redis-deployment.yaml2.3.1、查看 pod 信息和日志 2.4、检查部署和服务状态2.4.1、如果需要删除 3、查看 IP 的几个命令3.1、查看IP的几个命令3.2、解读3.3、宿主机…

【C语言】数据输出格式控制

数据的输出格式修饰 常用两种&#xff1a; 整型中&#xff0c;输出数据左对齐、右对齐、占m位、不足m位前补0。浮点型中&#xff0c;默认通过四舍五入保留小数点后6位&#xff0c;通过参数设置保留小数点后n位。 #include <stdio.h> #define PI 3.14159 /* 功能&#x…

D43【python 接口自动化学习】- python基础之函数

day43 装饰器&#xff08;上&#xff09; 学习日期&#xff1a;20241020 学习目标&#xff1a;函数&#xfe63;- 56 装饰器&#xff1a;函数嵌套的定义与调用的区别 学习笔记&#xff1a; 变量作用域 变量读取顺序&#xff1a;local-》enclosed-》global-》builtin # 变量…

Spring MessageSource国际化原理

spring framework提供MessasgeSource来实现国际化。 MessageSource用法 准备properties文件&#xff0c;放在resources文件夹下面。这是默认语言和韩语的文件。 i18n/message.propertiesi18n/message_ko.properties 文件里面的内容是key-value格式,使用{0}、{1}作为变量占位…

【Next.js 项目实战系列】05-删除 Issue

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c;给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 项目实战系列】04-修改 Issue 删除 Issue 添加删除 Button​ 本节代码链接 这里我们主要关注布局…

Win10 IDEA远程连接HBase

Win10 IDEA远程连接HBase Win10 IDEA连接虚拟机中的Hadoop&#xff08;HDFS&#xff09; 关闭Hadoop和Hbase 如果已经关闭不需要走这一步 cd /usr/local/hbase bin/stop-hbase.sh cd /usr/local/hadoop ./sbin/stop-dfs.sh获取虚拟机的ip 虚拟机终端输入 ip a关闭虚拟机…

VS Code开发qt项目

没整明白&#xff0c;尴尬 安装扩展 设置cmake路径 前提是已经安装了QT 报错 用msvc选windows启动&#xff0c;用mingw则选gdb启动

Vue3 新特性、Pinia

一、新特性 - defineOptions 背景说明 因为我们用了<script setup>语法&#xff0c;没办法给setup去提供一些平级的属性&#xff0c;官方就提供了一个叫做 defineOptions 的语法 所以在 Vue3.3 中引入了 defineOptions 宏&#xff0c;用来定义 Options API 的选项。可以…

[OpenCV] 数字图像处理 C++ 学习——17模板匹配详细讲解+附完整代码

文章目录 前言1.理论基础1.1模板匹配介绍1.2匹配算法介绍 2.代码实现2.1模块匹配(matchTemplate)2.2最佳匹配函数(minMaxLoc()) 3.完整代码 前言 模板匹配是图像处理和计算机视觉领域中的一种经典技术&#xff0c;它通过在大图像中搜索与小图像&#xff08;模板&#xff09;匹…

gewechat免费开源微信机器人开发

​聊天机器人&#xff0c;是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上&#xff0c;如PC平台或者移动终端设备平台。聊天机器人系统的主要功能是同用户进行基本沟通并自动回复用户有关产品或服务的问题&#xff0c;以实现降低企业客服运营成本、提升…

Tkinter 的布局pack() and grid()笔记

#encodingutf-8 import tkinter import re import tkinter.messagebox import tkinter.simpledialog import sys import os def get_resources_path(relative_path):if getattr(sys,frozen, False):base_pathsys._MEIPASS#获取临时文件else:base_pathos.path.dirname(".&q…

鸿蒙应用开发----西西购物商城(一)

目录 前言 一、项目介绍 二、项目结构 三、开发工具 四、样式展示 前言 harmonyos是华为推出的一款新一代操作系统&#xff0c;致力于打破设备间的边界&#xff0c;构建统一的智能生态。西西购物商城作为一款基于harmonyos开发的应用&#xff0c;能够利用鸿蒙的分布式技术…

R语言绘制Venn图(文氏图、温氏图、维恩图、范氏图、韦恩图)

Venn图&#xff0c;又称文氏图&#xff0c;标题中其他名字也是它的别称&#xff0c;由封闭圆形组成&#xff0c;代表不同集合。圆形重叠部分表示集合交集&#xff0c;非重叠处为独有元素。在生物学、统计学等领域广泛应用&#xff0c;可展示不同数据集相似性与差异&#xff0c;…

大数据新视界 --大数据大厂之大数据在智慧城市建设中的应用:打造智能生活的基石

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖

写在前面的话 在Pico上接入MRTK3&#xff0c;目前已有大佬开源。 https://github.com/Phantomxm2021/PicoMRTK3 也有值得推荐的文章。 MRTK3在PICO4上的使用小结 但由于在MacOS上使用MRTK3&#xff0c;无法通过Mixed Reality Feature Tool工具管理MRTK3安装包。 故记录一下…

集合collection和泛型

collection可以直接打印内容&#xff0c;而不是地址&#xff0c;内部已经重写了。 List家族&#xff1a; package com.itheima.d6_collection_update_delete;import java.util.ArrayList; import java.util.Iterator; import java.util.List;/**目标&#xff1a;研究集合遍历并…