PyTorch学习笔记(10)–搭建简单的神经网络以及Sequential的使用

    本博文是PyTorch的学习笔记,第10次内容记录,主要搭建一个简单的神经网络,并介绍Sequential的使用。

目录

  • PyTorch学习笔记(10)--搭建简单的神经网络以及Sequential的使用
  • 1.Sequential是什么
  • 2.Sequential使用
    • 2.1一个简单神经网络的搭建
    • 2.2使用Sequential搭建一个神经网络
  • 3.学习小结

1.Sequential是什么

    Sequential是一个时序容器。Modules 会以他们传入的顺序被添加到容器中。包含在PyTorch官网中torch.nn模块中的Containers中,在神经网络搭建的过程中如果使用Sequential,代码更简洁。

2.Sequential使用

2.1一个简单神经网络的搭建

    现以下列神经网络的搭建为例,输入图像是3通道的32×32的,先后经过卷积层(5×5的卷积核)、最大池化层(2×2的池化核)、卷积层(5×5的卷积核)、最大池化层(2×2的池化核)、卷积层(5×5的卷积核)、最大池化层(2×2的池化核)、拉直、全连接层的处理,最后输出的大小为10。

    搭建上述神经网络的具体代码如下:

# coding :UTF-8
# 文件功能: 代码实现搭建神经网络,并结合Sequential的使用
# 开发人员: dpp
# 开发时间: 2021/8/17 11:31 下午
# 文件名称: nn_sequential.py
# 开发工具: PyCharm
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass Test(nn.Module):def __init__(self):super(Test, self).__init__()self.conv1 = Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2)self.maxpool1 = MaxPool2d(kernel_size=2)self.conv2 = Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2)self.maxpool2 = MaxPool2d(kernel_size=2)self.conv3 = Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2)self.maxpool3 = MaxPool2d(kernel_size=2)self.flatten = Flatten()self.linear1 = Linear(1024, 64)self.linear2 = Linear(64, 10)def forward(self, x):x = self.conv1(x)x = self.maxpool1(x)x = self.conv2(x)x = self.maxpool2(x)x = self.conv3(x)x = self.maxpool3(x)x = self.flatten(x)x = self.linear1(x)x = self.linear2(x)return xtest = Test()
print(test)  # 输出网络的结构情况input = torch.ones((64, 3, 32, 32))
output = test(input)
print(output.shape)  # 输出output的尺寸

    输入数据是64张3通道的32×32的全1图像,输出结果如下:

Test((conv1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(conv3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(maxpool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(flatten): Flatten(start_dim=1, end_dim=-1)(linear1): Linear(in_features=1024, out_features=64, bias=True)(linear2): Linear(in_features=64, out_features=10, bias=True)
)
torch.Size([64, 10])

    补充说明:上述代码中在卷积层设置了参数padding=2,这个参数的设置不是随意设置的,是根据下列计算公式,计算得来的:

    其中Hout=32,Hin=32,dilation[0]=1,kernel_size[0]=5,将其带入到Hout的公式,计算过程如下:
32 =((32+2×padding[0]-1×(5-1)-1)/stride[0])+1,简化之后的式子为:
27+2×padding[0]=31×stride[0],其中stride[0]=1,所以padding[0]=2。

2.2使用Sequential搭建一个神经网络

    现以Sequential搭建上述一模一样的神经网络,并借助tensorboard显示计算图的具体信息。代码如下:

# coding :UTF-8
# 文件功能: 代码实现搭建神经网络,并结合Sequential的使用
# 开发人员: dpp
# 开发时间: 2021/8/17 11:31 下午
# 文件名称: nn_sequential.py
# 开发工具: PyCharm
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriterclass Test(nn.Module):def __init__(self):super(Test, self).__init__()self.model1 = Sequential(Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),MaxPool2d(kernel_size=2),Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2),MaxPool2d(kernel_size=2),Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2),MaxPool2d(kernel_size=2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):x = self.model1(x)return xtest = Test()
print(test)  # 输出网络的结构情况input = torch.ones((64, 3, 32, 32))
output = test(input)
print(output.shape)  # 输出output的尺寸writer = SummaryWriter("logs")
writer.add_graph(test, input)
writer.close()

    在Sequential实现神经网络后,借助Tensorboard查看神经网络对应的计算图结构,代码输出结果如下:

Test((model1): Sequential((0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(6): Flatten(start_dim=1, end_dim=-1)(7): Linear(in_features=1024, out_features=64, bias=True)(8): Linear(in_features=64, out_features=10, bias=True))
)
torch.Size([64, 10])

    在Tensorboard中查看计算图结果如下:

    在计算图上点击相应节点,能查看到数据的具体流向和数据细节信息。点开Test节点,查看到如下细节:

3.学习小结

    在本文中以一个具体的神经网络搭建为例,同时借助了Sequential简化了神经网络搭建过程,并在Tensorboard中查看神经网络计算图的详细信息,在下一篇博文,将介绍损失函数与反向传播。

PyTorch学习笔记(10)--搭建简单的神经网络以及Sequential的使用相关推荐

  1. 【从线性回归到 卷积神经网络CNN 循环神经网络RNN Pytorch 学习笔记 目录整合 源码解读 B站刘二大人 绪论(0/10)】

    深度学习 Pytorch 学习笔记 目录整合 数学推导与源码详解 B站刘二大人 目录传送门: 线性模型 Linear-Model 数学原理分析以及源码详解 深度学习 Pytorch笔记 B站刘二大人( ...

  2. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  3. 深度学习笔记其六:现代卷积神经网络和PYTORCH

    深度学习笔记其六:现代卷积神经网络和PYTORCH 1. 深度卷积神经网络(AlexNet) 1.1 学习表征 1.1 缺少的成分:数据 1.2 缺少的成分:硬件 1.2 AlexNet 1.2.1 ...

  4. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  5. 深度学习入门之PyTorch学习笔记:多层全连接网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...

  6. PyTorch学习笔记(五):模型定义、修改、保存

    往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...

  7. PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard

    文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...

  8. 深度学习入门之PyTorch学习笔记:深度学习介绍

    深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...

  9. pytorch学习笔记(2):在MNIST上实现一个CNN

    参考文档:https://mp.weixin.qq.com/s/1TtPWYqVkj2Gaa-3QrEG1A 这篇文章是在一个大家经常见到的数据集 MNIST 上实现一个简单的 CNN.我们会基于上一 ...

最新文章

  1. html调用百度地图语音播报,实现百度地图导航演示的语音播放功能
  2. 远程服务器返回错误: (500) 内部服务器错误。_[源码和文档分享]基于TCP SOCKET实现的远程聊天系统...
  3. GCC编译选项 -OX[转]
  4. leetcode403 青蛙过河
  5. docker ubuntu16.04镜像下安装cowrie蜜罐记录
  6. ofo回应发币传闻:从未参与虚拟货币的发行 与GSE Lab合作已终止
  7. RocketMQ入门到入土(四)producer生产消息源码剖析
  8. 元宇宙引擎脑语言2500令v0.5.6
  9. 雨听|Vs Code中使用markdown语法实现mac风格的代码块
  10. SQOOP学习笔记-报错怎么办?打就完了!
  11. 实习僧[shixiseng.com]爬虫实战笔记
  12. Android中Gson使用,flutter调用原生sdk
  13. Flutter Navigator 高级用法
  14. Android Framework实战开发-binder通信常见(oneway,in,out,inout)元素介绍及binder双向通信的实现
  15. openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
  16. 互联网集体下沉,PKQ后又一匹下沉黑马出现了
  17. Maven打包自定义MANIFEST.MF键值对
  18. ML-Agents案例之蠕虫
  19. android禁用模拟器,Android 禁止应用在模拟器上运行
  20. coc跑团san数值规则_从新手到入门但其实没有入门的coc跑团教程---pl篇

热门文章

  1. 做P2C必须了解的二维码知识
  2. C++ TGP 模板基础知识--01函数模板
  3. C++笔记 命名空间 namespace,全局作用域符::的使用
  4. 【转】LoadRunner结果分析
  5. 同济大学计算机陈永生,陈永生副教授简介
  6. MFC聊天多功能系统
  7. Airmail 添加QQ邮箱
  8. 关于Ox(O0、O1和O2)优化
  9. c# wpf 单选字体_WPF后台设置颜色字体等
  10. eclipse连接Tomcat服务器