深度学习(15)--PyTorch构建卷积神经网络

目录

一.PyTorch构建卷积神经网络(CNN)详细流程

二.graphviz + torchviz使PyTorch网络可视化

2.1.可视化经典网络vgg16

2.2.可视化自己定义的网络


一.PyTorch构建卷积神经网络(CNN)详细流程

卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。

卷积神经网络的详细介绍可以参考博主写的文章:

深度学习(2)--卷积神经网络(CNN)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/GodFishhh/article/details/135668789?spm=1001.2014.3001.5501

PyTorch构建神经网络的第一步均为引入神经网络包

import torch.nn as nn

卷积神经网络的构建: 

class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()# 卷积层->激活函数->池化层self.conv1 = nn.Sequential(         # 输入大小 (1, 28, 28)  pytorch中是channel_first的,颜色通道写在第一个位置nn.Conv2d(                      # 1d对结构化数据 2d对图像数据 3d对视频数据in_channels=1,              # 灰度图   输入的特征图数out_channels=16,            # 要得到几多少个特征图  输出的特征图数,也就是卷积核的个数(一个卷积核进行卷积可以得到一个特征图,所以卷积核的个数与特征图的数量相同)kernel_size=5,              # 卷积核大小stride=1,                   # 步长padding=2,                  # 如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 if stride=1  卷积后的图像大小: (h - Kernel_size + 2*p) / s + 1),                              # 输出的特征图为 (16, 28, 28)nn.ReLU(),                      # relu层nn.MaxPool2d(kernel_size=2),    # 进行池化操作(2x2 区域), 输出结果为: (16, 14, 14)  池化后特征数变少)self.conv2 = nn.Sequential(         # 下一个套餐的输入 (16, 14, 14)nn.Conv2d(16, 32, 5, 1, 2),     # 输出 (32, 14, 14)  nn.ReLU(),                      # relu层nn.MaxPool2d(2),                # 输出 (32, 7, 7))self.out = nn.Linear(32 * 7 * 7, 10)   # 全连接层得到的结果  最终数据的大小以及分类的数量def forward(self, x):# 调用卷积层x = self.conv1(x)x = self.conv2(x)x = x.view(x.size(0), -1)           # flatten操作,结果为:(batch_size, 32 * 7 * 7),分类无法对三维的数据进行处理,所以需要将三维图像拉长成一维数据再来进行分类.# -1是自动计算,只需给出一个维度的大小,会自动计算另外个维度.eg.5x4 -> x.view(2,-1),-1对应的就是10. 2x5x10 -> x.view(2,-1),-1对应的就是5x10# 在此处,给出的第一个参数x.size(0)的值为batch,所以-1对应的值就是32x7x7# 调用全连接层(全连接层的输入必须是二维的矩阵,上述的flattern操作将参数x变成了一个二维矩阵)output = self.out(x)return output

详解:

1.创建的神经网络构建类一定要继承nn.Module,后续要调用Module包里面的方法构建神经网络。

2.构造函数的第一步永远是调用父类的构造函数,利用super()进行调用:

super(CNN, self).__init__()

3.卷积神经网络的层次顺序一般为:卷积层-> 激活函数做非线性变换 ->池化层,并在输出之前设置一层全连接层。

4.上述代码构建的卷积神经网络是顺序Sequential的,设置有两个卷积层,两个激活函数,两个池化层,以及输出前的一个全连接层。(一般卷积一次就要池化一次)

nn.Sequential()

5.卷积层的构造:通过Module模块中的Conv2d来构造卷积层,其中参数分别为:输入图片数据的颜色通道数(第一个卷积层)/输入的特征图数(之后的卷积层)、输出的特征图数、卷积核的大小、步长、padding值。(其中Conv1d用来处理结构化数据,Conv2d用来处理图片数据,Conv3d用来处理视频数据)

此处设置的卷积层由输入的1个特征图数得到最后的32个特征图数

nn.Conv2d(1, 32, 5, 1, 2)
nn.Conv2d(16, 32, 5, 1, 2)

值得注意的是,如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 if stride=1  卷积后的图像大小: (h - Kernel_size + 2*p) / s + 1。

6.此处激活函数设置的是ReLU,可以根据自己的需求设置不同的激活函数。

nn.ReLU()

7.池化层的构造: 只需要设置一个参数,即为进行池化操作的区域大小。

nn.MaxPool2d(kernel_size=2)

8.全连接层的构造:输入的数据最后经过全连接层得到输出数据,参数分别为输入数据的大小,以及最后进行分类的类别数。

self.out = nn.Linear(32 * 7 * 7, 10)

9.前向传播:PyTorch构建的神经网络,前向传播需要手动设置,此处先调用conv1和conv2两层,再将数据拉成二维的传入全连接层,得到最后的输出值。

二.graphviz + torchviz使PyTorch网络可视化

事先需要先安装graphviz库和torchviz库,graphviz具体安装步骤可以参考博主写的文章:

深度学习(9)--pydot库和graphviz库安装流程详解_pydot 怎么安装-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/GodFishhh/article/details/135929146?spm=1001.2014.3001.5501torchviz库可以直接再编译器中进行安装,也可也在cmd中对应环境中使用pip指令安装:

上述两个库安装完之后,导入网络可视化需要用到的头文件:

from torchviz import make_dot
from torchvision.models import vgg16  # 导入vgg16模型用于演示

2.1.可视化经典网络vgg16

# 随机生成一个tensor张量(对应的数据为图片有十张,图片的大小为3x32x32)
x = torch.randn(10, 3, 32, 32)
# 实例化 vgg16
model = vgg16()
# 将 x 输入网络
vgg16_out = model(x)
# 实例化 make_dot
vgg16_result = make_dot(vgg16_out)
# result.view()  直接在当前路径下保存 pdf 并打开
# 保存文件为pdf到指定路径并不打开
vgg16_result.render(filename='vgg16_net_Structure', view=False, format='pdf')

生成如下两个文件 

 

2.2.可视化自己定义的网络

# 随机生成一个tensor张量(对应的数据为图片有四张,图片的大小为1x28x28)
x = torch.randn(4, 1, 28, 28)
# 实例化 vgg16
model = CNN()
# 将 x 输入网络
CNN_out = model(x)
# 实例化 make_dot
CNN_result = make_dot(CNN_out)
# result.view()  直接在当前路径下保存 pdf 并打开
# 保存文件为pdf到指定路径并不打开
CNN_result.render(filename='CNN_net_Structure', view=False, format='pdf')

生成如下两个文件  

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

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

相关文章

PHP入门指南:进阶篇

PHP入门指南:进阶篇 PHP入门指南:进阶篇1. 面向对象编程(OOP)1.1 类和对象的基本概念1.2 构造函数和析构函数1.3 属性和方法的访问控制1.4 继承与多态 2. 错误和异常处理2.1 错误处理机制2.2 异常处理机制2.3 自定义异常类 3. PHP…

Hadoop搭建(完全分布式)

节点分布: bigdata-masterbigdata-slave1bigdata-salve2 NameNode NodeManager NodeManager SecondaryNameNodeDataNodeDataNodeResourceManagerNodeManagerDataNode 目录 一、jdk安装: 二、hadoop安装 一、jdk安装: jdk-8u212链接&am…

信息隐藏研究新动向

信息隐藏有三十年的研究历史,在隐写、数字水印、可逆数据隐藏等方面,国内外发展了一系列新技术与新方法。随着深度学习时代的来临,信息隐藏研究出现了新的变化。一方面,深度学习技术在信息隐藏的发展中发挥了重要作用;…

94.网游逆向分析与插件开发-游戏窗口化助手-地图数据获取的逆向分析与C++代码还原

内容参考于:易道云信息技术研究院VIP课 上一个内容:升级经验数据获取的逆向分析 码云地址(游戏窗口化助手 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:c4351a5b346d8953a1a8e3ec…

SpringCloud-Eureka原理分析

Eureka是Netflix开源的一款用于实现服务注册与发现的工具。在微服务架构中,服务的动态注册和发现是必不可少的组成部分,而Eureka正是为了解决这一问题而诞生的。 一、为何需要Eureka 在微服务架构中,服务之间的协同合作和高效通信是至关重要…

CentOS下安装vlc

一、引言 vlc是一跨多媒体播放器,可以播放本地媒体文件和网络串流,帮助我们排查音视频开发过程中遇到的问题。大部分情况下,我们只需要在Windows系统下安装vlc就可以了。但有一种情况是需要在Linux下安装vlc的:我们的音视频拉流软…

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例(802.1X认证) 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络,使用802.1X客户端进行认证,输入正确的用户名和密…

Day10案例演示

Day10案例演示 在 AppInfoScanner所在的文件中运行cmd&#xff0c;输入 python -m pip install -r requirements.txt安装环境 具体用法可移步&#xff1a;https://github.com/kelvinBen/AppInfoScanner 以下仅以android类型示范 python app.py android -i <Your apk fil…

【Git版本控制 02】分支管理

目录 一、创建分支 二、切换分支 三、合并分支 四、删除分支 五、合并冲突 六、分支策略 七、bug分支 一、创建分支 # 当前仓库只有 master 一个主分支 # 可通过 git branch 是进行分支管理的命令&#xff0c;可通过不同参数对分支进行查看、创建、删除(base) [rootloc…

第一个 Angular 项目 - 静态页面

第一个 Angular 项目 - 静态页面 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 这是在学完了上面这三个内容后能够完成的项目&#xff0c;目前因为还没有学到数…

Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi

文章目录 简介Asp .Net Core 集成 Panda.DynamicWebApi配置原理什么是POCO Controller&#xff1f;POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigurePar…

S7-1200PLC通讯问题总结

文章目录 一、硬件1.串口通信RS232RS485RS422 2.网口通信 二、协议1.串口通信协议2.网口通信协议 三、程序编写1.S7通信PUTGET 2.开放式以太网通信 一、硬件 可分为PLC与PLC通信&#xff0c;PLC与上位机通信&#xff0c;PLC与变频器通信&#xff0c;PLC与仪器仪表通信&#xf…

兼容ARM 32位架构的edgeConnector产品为用户提供新的部署选项

Softing工业将ARM 32位兼容性集成到了edgeConnector产品中&#xff0c;以满足用户对ARM处理器的边缘设备日益增长的使用需求。 &#xff08;兼容ARM 32位架构的edgeConnector产品扩展了其应用部署范围&#xff09; 用户对采用ARM处理器的紧凑型边缘设备的需求正在大幅增长&…

使用 Docker 镜像预热提升容器启动效率详解

概要 在容器化部署中,Docker 镜像的加载速度直接影响到服务的启动时间和扩展效率。本文将深入探讨 Docker 镜像预热的概念、必要性以及实现方法。通过详细的操作示例和实践建议,读者将了解如何有效地实现镜像预热,以加快容器启动速度,提高服务的响应能力。 Docker 镜像预热…

使用influxdb+Grafana+nmon2influxdb+nmon实时监控vps性能

Grafana可以用来实时查看linux系统的各种性能数据。 1、安装环境&#xff1a; centos 7influxdb1.7.6grafana-4.6.3-1nmon2influxdb-2.1.7nmon-16m 2、安装influxdb&#xff1a; 下载rpm包&#xff1a; influxdb官网&#xff1a;https://docs.influxdata.com/influxdb/v2.0…

【Git版本控制 01】基本操作

目录 一、初始配置 二、添加文件 三、查看日志 四、修改文件 五、版本回退 六、撤销修改 七、删除文件 一、初始配置 Git版本控制器&#xff1a;记录每次的修改以及版本迭代的一个管理系统。 # 初始化本地仓库&#xff1a;git init(base) [rootlocalhost gitcode]# gi…

NLP_语言模型的雏形 N-Gram 模型

文章目录 N-Gram 模型1.将给定的文本分割成连续的N个词的组合(N-Gram)2.统计每个N-Gram在文本中出现的次数&#xff0c;也就是词频3.为了得到一个词在给定上下文中出现的概率&#xff0c;我们可以利用条件概率公式计算。具体来讲&#xff0c;就是计算给定前N-1个词时&#xff0…

笔记---dp---数字三角形模型

所谓数字三角形模型&#xff0c;即是从数字三角形这一题衍生出来的 题目为经典题目&#xff0c;不再赘述&#xff0c;此笔记根据AcWing算法提高课来进行对数字三角形模型衍生例题的记录 题目关系如下&#xff08;见AcWing里的AcSaber&#xff09;&#xff1a; AcWing.1015.摘…

微信小程序(三十八)滚动容器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.滚动触底事件 2.下拉刷新事件 源码&#xff1a; index.wxml <view class"Area"> <!-- scroll-y 垂直滚动refresher-enabled 允许刷新bindrefresherrefresh 绑定刷新作用函数bindscrollto…

单片机无线发射的原理剖析

目录 一、EV1527编码格式 二、OOK&ASK的简单了解 三、433MHZ 四、单片机的地址ID 五、基于STC15W104单片机实现无线通信 无线发射主要运用到了三个知识点&#xff1a;EV1527格式&#xff1b;OOk&#xff1b;433MHZ。下面我们来分别阐述&#xff1a; EV1527是数据的编…