现代卷积网络实战系列4:PyTorch从零构建VGGNet训练MNIST数据集

🌈🌈🌈现代卷积网络实战系列 总目录

本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

1、MNIST数据集处理、加载、网络初始化、测试函数
2、训练函数、PyTorch构建LeNet网络
3、PyTorch从零构建AlexNet训练MNIST数据集
4、PyTorch从零构建VGGNet训练MNIST数据集
5、PyTorch从零构建GoogLeNet训练MNIST数据集
6、PyTorch从零构建ResNet训练MNIST数据集

8、VGGNet

2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNet,并取得了ILSVRC2014比赛分类项目的第二名(第一名是GoogLeNet,也是同年提出的).论文下载 Very Deep Convolutional Networks for Large-Scale Image Recognition。论文主要针对卷积神经网络的深度对大规模图像集识别精度的影响,主要贡献是使用很小的卷积核(3×3)构建各种深度的卷积神经网络结构,并对这些网络结构进行了评估,最终证明16-19层的网络深度,能够取得较好的识别精度。 这也就是常用来提取图像特征的VGG-16和VGG-19。

VGG可以看成是加深版的AlexNet,整个网络由卷积层和全连接层叠加而成,和AlexNet不同的是,VGG中使用的都是小尺寸的卷积核(3×3)。
我这里使用的是VGG-16,但是又因为这个系列全部是处理MNIST数据集的,所以我这里的VGG网络只用了3个VGG块,FC也减少了很多参数。

9、VGGNet网络架构

在这里插入图片描述

VGGNet(
 (vgg1): VGGBlock(
  (conv1): Conv2d(1, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu1): ReLU(inplace=True)
  (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu2): ReLU(inplace=True)
  (conv3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu3): ReLU(inplace=True)
  (maxpool1): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
  )
 (vgg2): VGGBlock(
  (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu1): ReLU(inplace=True)
  (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu2): ReLU(inplace=True)
  (conv3): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu3): ReLU(inplace=True)
  (maxpool1): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
 )
 (vgg3): VGGBlock(
  (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu1): ReLU(inplace=True)
  (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu2): ReLU(inplace=True)
  (conv3): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu3): ReLU(inplace=True)
  (maxpool1): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
 )
(classifier): Sequential(
  (0): Linear(in_features=12544, out_features=1024, bias=True)
  (1): ReLU(inplace=True)
  (2): Linear(in_features=1024, out_features=512, bias=True)
  (3): ReLU(inplace=True)
  (4): Linear(in_features=512, out_features=10, bias=True)
 )
)

VGG实际上就是很简单,主要是由VGG块组成:
前两组卷积形式一样,每组都是:conv-relu-conv-relu-pool
中间三组卷积形式一样,每组都是:conv-relu-conv-relu-conv-relu-pool
最后分类的三个全连接层:fc-relu-dropout-fc-relu-dropout-fc-softmax

10、PyTorch构建VGGBlock

class VGGBlock(nn.Module):def __init__(self, in_channel, out_channel, num_conv):super(VGGBlock, self).__init__()self.num_conv = num_convself.conv1 = nn.Conv2d(in_channel, out_channel, kernel_size=3, stride=1, padding=1)self.relu1 = nn.ReLU(inplace=True)self.conv2 = nn.Conv2d(out_channel, out_channel, kernel_size=3, stride=1, padding=1)self.relu2 = nn.ReLU(inplace=True)self.conv3 = nn.Conv2d(out_channel, out_channel, kernel_size=3, stride=1, padding=1)self.relu3 = nn.ReLU(inplace=True)self.maxpool1 = nn.MaxPool2d(3, stride=2, padding=1)def forward(self, x):x = self.relu1(self.conv1(x))x = self.relu2(self.conv2(x))if self.num_conv==3:x = self.relu3(self.conv3(x))else:x = self.maxpool1(x)return x

11、PyTorch构建VGGNet

class VGGNet(nn.Module):def __init__(self, num_classes):super(VGGNet, self).__init__()self.vgg1 = VGGBlock(1,64,2)self.vgg2 = VGGBlock(64,128,2)self.vgg3 = VGGBlock(128,256,3)self.classifier = nn.Sequential(nn.Linear(256 * 7 * 7, 1024),nn.ReLU(inplace=True),nn.Linear(1024, 512),nn.ReLU(inplace=True),nn.Linear(512, num_classes))def forward(self, x):x = self.vgg1(x)x = self.vgg2(x)x = self.vgg3(x)x = x.reshape(x.shape[0], -1)x = self.classifier(x)return x

D:\conda\envs\pytorch\python.exe A:\0_MNIST\train.py

Reading data…
train_data: (60000, 28, 28) train_label (60000,)
test_data: (10000, 28, 28) test_label (10000,)

Initialize neural network
test loss 2303.1
test accuracy 10.1%

epoch step 1
training time 8.9s
training loss 204.3
test loss 39.6
test accuracy 98.8%

epoch step 2
training time 8.3s
training loss 48.8
test loss 39.7 test
accuracy 98.8%

epoch step 3
training time 8.1s
training loss 35.9
test loss 26.4
test accuracy 99.1%

Training finished
3 epoch training time 25.4s
One epoch average training time 8.5s

进程已结束,退出代码为 0

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

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

相关文章

【51单片机】10-蜂鸣器

1.蜂鸣器的原理 这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵&#xff…

编译和链接

要闯入计算机的世界就逃不过编程这个词,编译和链接是编程过程中的两个重要步骤。在编写源代码后,需要通过编译和链接才能生成可执行文件。 引言——什么是编程 编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算…

C# 自定义控件库之Lable组合控件

1、创建类库 2、在类库中添加用户控件(Window窗体) 3、控件视图 4、后台代码 namespace UILib {public partial class DeviceInfoV : UserControl{public DeviceInfoV(){InitializeComponent();ParameterInitialize();}#region 初始化private void Par…

pytorch的pixel_shuffle转tflite文件

torch.pixel_shuffle()是pytorch里面上采样比较常用的方法,但是和tensoflow的depth_to_space不是完全一样的,虽然看起来功能很像,但是细微是有差异的 def tf_pixelshuffle(input, upscale_factor):temp []depth upscale_factor *upscale_f…

关于表单快速开发低代码技术平台的内容介绍

运用什么样的表单快速开发软件平台可以实现高效率创收?随着科技的进步和飞速发展,专业的低代码技术平台已经走入了很多企业的办公职场中,它们灵活、轻量级、优质、高效、易维护等优势特点,可以高效助力广大企业提质增效&#xff0…

html、css学习记录【uniapp前奏】

Html 声明:该学习笔记源于菜鸟自学网站,特此记录笔记。很多示例源于此官网,若有侵权请联系删除。 文章目录 Html声明: CSS 全称 Cascading Style Sheets,层叠样式表。是一种用来为结构化文档(如 HTML 文档…

ipaguard界面概览

ipaguard界面概览 ipaguard界面分左右2块:左边菜单导航栏,右边的功能区 左侧菜单:按模块分成启动界面,代码模块,文件模块,重签名与测试模块 右侧主功能区会随着功能变化,但是整体分3块&#xf…

vue下载在前端存放的pdf文件

vue下载在前端存放的pdf文件 注意,这里要在public文件夹中新建文件夹存放静态资源,不能在src文件夹中新建文件夹存放静态资源,因为public文件夹中的文件资源不会被npm run build打包编译。大家打包一下,就会发现 模板.pdf文件 是存…

简化任务调度与管理:详解XXL-Job及Docker Compose安装

在现代应用程序开发中,任务调度和管理是至关重要的一部分。XXL-Job是一个强大的分布式任务调度平台,它使得任务的调度和管理变得更加轻松和高效。本文将介绍XXL-Job的基本概念,并详细演示如何使用Docker Compose进行快速安装和配置。 什么是X…

05-前端基础CSS第三天

01-CSS三大特性之层叠性 1.CSS的三大特性 CSS有三个非常重要的三个特性:层叠性、继承性、优先级。 1.1 层叠性 相同选择器给设置相同的样式,此时一个样式就会**覆盖(层叠)**另一个冲突的样式。层叠性主要解决样式冲突的问题。…

C++——list(2)

作者:几冬雪来 时间:2023年9月28日 内容:C——list内容讲解 目录 前言: list的const迭代器: const的iterator: const迭代器: operator->: 拷贝构造: 迭代器接口补充&…

船用白炽照明灯具

声明 本文是学习GB-T 3027-2012 船用白炽照明灯具. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了船用白炽照明灯具(以下简称灯具)的要求、试验方法、检验规则、标识、包装和储 存等。 本标准适用于电源电压在250V 以下的交流…

排序:简单选择排序算法分析

选择排序包括简单选择排序以及堆排序。 1.算法分析 每一趟在待排序元素中选取关键字最小的元素加入有序子序列。 n个元素的简单选择排序需要n-1趟处理。 2.代码实现 //交换 void swap(int &a, int &b) {int temp a;a b;b temp; }//简单选择排序 void SelectSort…

计算机毕业设计 基于SSM的垃圾分类管理系统(以医疗垃圾为例)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

activemq部署

目录 1.下载 2.java环境 3.解压启动 4.访问测试 5.问题记录 5.1.无法启动成功问题 5.2.其他服务器无法访问 1.下载 ActiveMQ 2.java环境 需要注意要求的jdk版本,否则启动不会成功 3.解压启动 tar -zxvf apache-activemq-5.18.2-bin.tar.gz 进入到目录下执行…

VS编译器常见的错误

以上问题在编译器中出现可以在编译器中最上面加入: #define_CRT_SECURE_NO_WARNINGS 或者将scanf修改为scanf_s 一定要在最上端!!!最上端!!!最上端加入!!! 虽…

VMware下安装、配置ubuntu虚拟系统

本次测试以 ubuntu18.04 为例,进行操作说明。 1、下载镜像文件 进入网址:Ubuntu Releases ,获取需下载的18.04系统镜像,如下图所示,直接下载iso文件即可。 2、VM中设置虚拟机参数 在VM主界面上,点击“创…

抖音开放平台第三方代小程序开发,一整套流程

大家好,我是小悟 抖音小程序第三方平台开发着力于解决抖音生态体系内的小程序管理问题,一套模板,随处部署。能尽可能地减少服务商的开发成本,服务商只用开发一套小程序代码作为模板就可以快速批量的孵化出大量的商家小程序。 第…

MeterSphere v2.10.X-lts 双节点HA部署方案

一、MeterSphere高可用部署架构及服务器配置 1.1 服务器信息 序号应用名称操作系统要求配置要求描述1负载均衡器CentOS 7.X /RedHat 7.X2C,4G,200GB部署Nginx,实现负载路由。 部署NFS服务器。2MeterSphere应用节点1CentOS 7.X /RedHat 7.X8C,16GB,200G…

指南:通过 NFTScan API 获取钱包地址的 NFT Statistics 全量数据

获取钱包地址的全量 NFT 及统计分析数据对于开发者和投资者来说都是十分重要的。具体来说:对开发者而言,获取每个钱包的完整资产数据,并进行统计分析,是构建钱包管理工具、资产分析应用的基础,这些应用都需要全面且精确…