PyTorch学习笔记(三)构建卷积神经网络模型

基于Pytorch的卷积神经网络CNN实例应用及详解 基于Pytorch的卷积神经网络CNN实例应用及详解 一、卷积神经网络CNN定义 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的。在短时间内,它们变成了一种颠覆性的技术,打破了从文本、视频到语音等多个领域所有最先进的算法,远远超出了其最初在图像处理的应用范围。CNN 由许多神经网络层组成。卷积和池化这两种不同类型的层通常是交替的。网络中每个滤波器的深度从左到右增加。最后通常由一个或多个全连接的层组成。 二、卷积神经网络的原理 ... 阅读详情

Environment

  • OS: macOS Mojave
  • Python version: 3.7
  • PyTorch version: 1.4.0
  • IDE: PyCharm


0. 写在前面

使用 PyTorch 建模还是比较方便滴,大致可分为三部分

  1. 构建网络层,在 继承于 torch.nn.Module 的类对象的构造器 __init__ 方法中定义卷积、池化、线性、激活函数等;
  2. 定义前向传播,重写 forward 实例方法;
  3. 定义初始化方式,使用 torch.nn.init 中的函数。

1. 模型 Containers

PyTorch 中组装模型需要用到 Containers,包括 Module、Sequential、ModuleList、ModuleDict。Module 是所有模型的基类,此外一般看到用的是 Sequential,这儿小记一下用法。

1.1 Module 类

torch.nn.Module 为所有模型的基类

from torch.nn import Module
from torch.nn import Conv2d, ReLU, MaxPool2d, Linear


class LeNet5(Module):  # 继承
    def __init__(self, num_classes=10):
        super(LeNet5, self).__init__()
        self.conv1 = Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)
        self.conv2 = Conv2d(6, 16, 5)
        self.linear1 = Linear(in_features=16 * 5 * 5, out_features=120)
        self.linear2 = Linear(120, 84)
        self.linear3 = Linear(84, num_classes)
        self.relu = ReLU()
        self.maxpool = MaxPool2d(kernel_size=2)

    def forward(self, x):  # 一个 module 相当于一个运算,必须实现 forward 函数
        x = self.conv1(x)  # 1 x 28 x 28 -> 6 x 28 x 28
        x = self.relu(x)
        x = self.maxpool(x)  # 6 x 28 x 28 -> 6 x 14 x 14
        x = self.conv2(x)  # 6 x 14 x 14 -> 16 x 10 x 10
        x = self.relu(x)
        x = self.maxpool(x)  # 16 x 10 x 10 -> 16 x 5 x 5

        x = torch.flatten(x, 1)

        x = self.linear1(x)  # 400 -> 120
        x = self.relu(x)
        x = self.linear2(x)  # 120 -> 84
        x = self.relu(x)
        x = self.linear3(x)  # 84 -> num_classes

        return x


torch.nn.Module 实例对象的属性
在这里插入图片描述

1.2 Sequential 类

torch.nn.Sequential 类能够将多个网络层按顺序组装,一般向 Sequential 中传入网络层有两种格式

  1. 向 Sequential 中直接传入各网络层,实例化后以数字为索引
from torch.nn import Module, Sequential
from torch.nn import Conv2d, ReLU, MaxPool2d, Linear


class LeNet5(Module):
    def __init__(self, num_classes=10):
        super(LeNet5, self).__init__()

        self.features = Sequential(
            Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2),
            ReLU(),
            MaxPool2d(kernel_size=2, stride=2),
            Conv2d(6, 16, 5),
            ReLU(),
            MaxPool2d(2, 2)
        )

        self.classifier = Sequential(
            Linear(in_features=16 * 5 * 5, out_features=120),
            ReLU(),
            Linear(120, 84),
            ReLU(),
            Linear(84, num_classes)
        )

    def forward(self, x):
        x = self.features(x)  # 使用了Sequential,这儿写起来就简洁一些
        x = torch.flatten(x, 1)
        x = self.classifier(x)

        return x


if __name__ == '__main__':
    lenet = LeNet5()
    print(lenet.features[3])  # 以数字为索引
# Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))

  1. 向 Sequential 中传入 OrderedDict 对象,实例化后可以自定义的名字为索引
from collections import OrderedDict
from torch.nn import Module, Sequential
from torch.nn import Conv2d, ReLU, MaxPool2d, Linear


class LeNet5(Module):
    def __init__(self, num_classes=10):
        super(LeNet5, self).__init__()

        self.features = Sequential(OrderedDict({
            'conv1': Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2),
            'relu1': ReLU(),
            'pool1': MaxPool2d(kernel_size=2, stride=2),

            'conv2': Conv2d(6, 16, 5),
            'relu2': ReLU(),
            'pool2': MaxPool2d(2, 2)
        }))

        self.classifier = Sequential(OrderedDict({
            'fc1': Linear(in_features=16 * 5 * 5, out_features=120),
            'relu1': ReLU(),
            'fc2': Linear(120, 84),
            'relu2': ReLU(),
            'fc3': Linear(84, num_classes)
        }))

    def forward(self, x):
        x = self.features(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)

        return x


if __name__ == '__main__':
    lenet = LeNet5()
    print(lenet.features.conv2)
# Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))

2. 构建 AlexNet 模型

至此,可以轻易地搞出一个经典的卷积神经网络模型 AlexNet,参考


导入需要的模块和类

import torch
from torch.nn import Module, Sequential, Conv2d, MaxPool2d, Linear, ReLU, Dropout, AdaptiveAvgPool2d

包含模型的 .py 文件常作为一个模块,定义被导入时将导入的内容

__all__ = ['AlexNet']

定义网络结构

class AlexNet(Module):

    def __init__(self, num_classes=1000):
        super(AlexNet, self).__init__()
        self.features = Sequential(
            Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            ReLU(inplace=True),
            MaxPool2d(kernel_size=3, stride=2),
            Conv2d(64, 192, kernel_size=5, padding=2),
            ReLU(inplace=True),
            MaxPool2d(kernel_size=3, stride=2),
            Conv2d(192, 384, kernel_size=3, padding=1),
            ReLU(inplace=True),
            Conv2d(384, 256, kernel_size=3, padding=1),
            ReLU(inplace=True),
            Conv2d(256, 256, kernel_size=3, padding=1),
            ReLU(inplace=True),
            MaxPool2d(kernel_size=3, stride=2),
        )
        self.avgpool = AdaptiveAvgPool2d((6, 6))
        self.classifier = Sequential(
            Dropout(),
            Linear(256 * 6 * 6, 4096),
            ReLU(inplace=True),
            Dropout(),
            Linear(4096, 4096),
            ReLU(inplace=True),
            Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x


3. torchvision 提供的模型

torchvision.models 模块提供了一些经典的模型

  • 经典的神经网络(依时间从早到迟排序)
from torchvision.models import alexnet, vgg, googlenet, inception, resnet, densenet
  • 经典的轻量级神经网络
from torchvision.models import mobilenet, shufflenetv2, squeezenet
  • 经典的神经网络自动搜索结构
from torchvision.models import mnasnet
【Pytorch教程】:卷积神经网络 CNN Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知 阅读详情

相关推荐

PyTorch--卷积神经网络(CNN)模型实现手写数字识别

今天要介绍的这段代码是一个使用PyTorch框架实现的卷积神经网络(CNN)模型,用于对MNIST数据集进行分类的示例。MNIST数据集是手写数字识别领域的一个标准数据集,包含0到9的灰度图像。导入必要的库:导入PyTorch、PyTorch神经网络模块、torchvision(用于处理图像数据集)和transforms(用于图像预处理)。设备配置:设置模型运行的设备,优先使用GPU(如果可用),否则使用CPU。超参数设置:定义了训练迭代的轮数(num_epochs)、类别数()、批次大小(

wumingzei的博客 3605

简单粗暴,上手修改原始神经网络模型的结构,以mobilenetv2为例

如题,想用mobilenetv2来训练自己的数据集,那肯定需要对原有的模型进细微的修改,至少需要把分类数给修改一下吧。 要想细微修改网络模型,则需要首先知道网络模型的结构,以mobilenetv2为例,简单使用如下代码: from torchvision.models import mobilenet_v2 import torch.nn as nn num_classes=100 net=mobilenet_v2().cuda() print(net) 运行上述代码,显示mobilenetv2

booklijian的专栏 4317

学习笔记:深度学习(4)——卷积神经网络(CNN)PyTorch实践篇

小白PyTorch超快上手,采用CNN做了一个手写数字识别,一个MINST手写数字预测,以及尝试了Kaggle的Spaceship Titanic案例。

Morganfs的博客 4331

深度学习pytorch代码:完整的卷积神经网络模型的搭建及训练(含注释)

import torch.optim.optimizer import torchvision # 准备数据集 from torch.utils.tensorboard import SummaryWriter from model import * from torch.utils.data import DataLoader train_data = torchvision.datasets.CIFAR10(r"C:\Users\123\Desktop\python4.7\test03\data".

weixin_44575717的博客 2662

使用Pytorch搭建CNN

文章目录卷积卷积层GPUCNN(卷积神经网络)一个简单的CNN准备数据与训练模型ResNet改变学习率SEVgg 卷积 下面的conv函数实现了对二维单通道图像的卷积.考虑输入的卷积核kernel的长宽相同,padding为对图像的四个边缘补0,stride为卷积核窗口滑动的步长. import numpy as np def convolution(img, kernel, padding=...

羊城迷鹿的博客 2万+

Innovus每日精要 | 用setScanReorderMode优化扫描链,效率翻倍!

在数字后端物理设计的世界里,扫描链优化就像修路一样,既要保证数据流的顺畅,又要尽量减少绕路和资源浪费。它的主要任务是优化扫描链的连接方式,确保数据能快速、安全地流动。无论是多电压域设计、分区设计,还是复杂的逻辑门,它都能帮你搞定。后,你会发现它不仅能帮你节省时间,还能让你的设计更优雅、更高效。下次遇到扫描链问题时,不妨试试这些技巧,说不定你的设计效率会翻倍!,它能帮你搞定扫描链优化的那些事儿,让你的设计更高效、更优雅。接下来,我们看看这个命令的几个关键选项,以及它们的实际用途。扫描链优化看似枯燥,但掌握。

weixin_50820814的博客 1442

Mobilenet系列(3):使用pytorch搭建MobileNetV2并基于迁移学习训练

MobileNet系列(2):MobileNet-V2 网络详解

@bangbang的博客 4259

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 538

ResNet浅记

对ResNe比较好奇,既简单学习并浅记一下,方便以后查阅。

梁小憨憨的博客 1220

【创作赢红包】Gurobi学术版证书更新与Python环境配置全攻略

本文详细解析了Gurobi学术版证书过期后的完整更新流程与Python环境配置方法。从彻底清理旧版残留、手把手注册获取新许可证,到软件安装、证书激活,最后重点讲解如何将gurobipy接口正确配置到Python的site-packages目录,并提供了常见问题排查方案,帮助用户高效解决证书与配置难题。

efc1234567的博客 613

使用openair包分析气象数据

气象数据通常是有规律的时间序列,分析气象数据时需要对空气质量测量、气象数据和扩散模型输出进行分析。openair 是用于分析空气质量数据或更广泛的大气成分数据的R软件包。该软件包广泛应用于学术界、公共和私营部门。该项目最初由英国自然环境研究委员会(NERC)资助,并由英国环境部(Defra)提供额外资金。

Christina 2520

[027] 深度学习--学习笔记(5)CNN与ResNe的理论基础

1、CNN的提出 ①硬件设备的滞后 1980年,Yann LeCun在做手写数字识别时,以全连接层的形式构建神经网络,假设这个网络有四层,那么最终会产生236K个参数量,而且每个参数都是浮点型Float,即需要236K * 4 = 944K (Byte) 的运存空间。但当时计算机(AT&T DSP)芯片才有256K (Byte)的运存空间,所以这个网络无法实现运行。 ②从生物视觉获得启发 生物视觉:人观察一个画面时,总是聚焦于局部,并从多个局部构建整个画面印象。 启发:神经网络不一定把...

yhxxhy978的博客 1379

AUTOSAR R20-11标准下载!

这是公众号的第2篇推文,粉丝数49 Document Search Classic Platform Adaptive Platform Foundation 文档截图 以为会在明天的发布会之后才上线,没想到官网现在就悄悄放出来了。 中国由于网络问题,下载速度比较慢或者会中断。 “阅读原文”提供多种下载方式,可以在线浏览,可以集中下载也可单个文档下载。 如有增减我也会及时在公众号里通知大家,不过我觉得不会变动了。 整理不宜,好东西要分...

Adaptive_AUTOSAR的博客 1891

CNN卷积神经网络实例(基于pytorch)

CNN卷积神经网络1.关于卷积神经网络2.卷积神经网络实例(手写字母识别)2.1 代码示例2.2 运行过程及结果2.3 测试结果3.参考与致谢 1.关于卷积神经网络 卷积神经网络(Convolutional Neural Network,CNN) 是一种具有局部连接、权重共享等特征的深层前馈神经网络。 我们先来看一下比较直观的了解一下,对卷积神经网络有个感性的认识: 我们首先先对我们输入的图片进行一次卷积,而后加入Relu激活函数,再做一次卷积,再加入Relu激活函数,而后对其处理结果进行汇聚(此处为Po

weixin_38468077的博客 2万+

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2056

18、基于FSDD数据集的深度学习案例分析

本文基于FSDD(Free Spoken Digit Dataset)数据集,系统介绍了深度学习在语音数字识别中的应用。内容涵盖动态与静态计算图的对比、数据预处理流程(包括数据增强、固定长度处理和归一化)、监督学习与无监督学习的模型构建与训练过程,并通过实验对比了不同网络架构的性能。文中使用PyTorch实现2层全连接网络和自编码器模型,展示了正则化技术对提升模型准确率的关键作用。最后总结了关键技术并提出了实际应用建议,展望了未来在复杂模型、多模态融合和实时应用方向的发展潜力。

vscode6remote的博客 260

【Pytorch】计算机视觉项目——卷积神经网络CNN模型识别图像分类

介绍卷积神经网络CNN的可视化解释器,分步骤详解如何使用Pytorch搭建CNN模型完成图像分类任务。

WHYbeHERE的博客 1万+

R数据分析:潜在剖面分析LPA的做法与解释

Latent Profile Analysis (LPA) tries to identify clusters of individuals (i.e., latent profiles) based on responses to a series of continuous variables (i.e., indicators). LPA assumes that there are unobserved latent profiles that generate patterns of resp.

Codewar的博客 1万+

Pytorch基于卷积神经网络的人脸表情识别(白话CNN+数据集+代码实战)

Pytorch基于卷积神经网络的人脸识别(保姆级教程:白话CNN+数据集+代码实战) 前言 提示:本篇文章主要是关于李宏毅教授授课视频中的作业进行介绍,小白博主所作工作只是将现有的知识内容结合网路上一些优秀作者的总结以博文的形式加上自己的理解复述一遍。本文主要还是我的学习总结,因为网上的一些知识分布比较零散故作整理叙述。如果有不对的地方,还请帮忙指正,如有出现禁止转载的图片,文字内容请联系我修改。   相关参考:     李宏毅2020机器学习深度学习(完整版)国语:链接: lin

qq_43815869的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

用PyTorch构建基于卷积神经网络的手写数字识别模型

MINST数据库是机器学习领域非常经典的一个数据集,其由Yann提供的手写数字数据集构成,包含了0-9共10类手写数字图片,每张图片都做了尺寸归一化,都是28x28大小的灰度图。每张图片中像素值大小在0-255之间,其中0是黑色背景,255是白色前景。

方见华 6804

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pytorch搭建CNN卷积神经网络详解

个人觉得应该先写卷积操作的常见技术和公式操作,才能对卷积输入维度(结果),输出维度(结果)有更直观的了解吧。 简单介绍一下卷积的常用trick: Padding Striding 下方是输入输出公式(本人开始也很困惑,找到对应公式后,就十分明朗了): n:原始输入的维度 | f:卷积核的大小 | p:padding的大小| s:stride的大小 no padding: n - ...

Troublemaker丶的博客 3万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

本文相熟了卷积神经网络CNN的原理,并介绍了如何使用PyTorch框架搭建卷积神经网络模型CNN。实现了LeNet-5的模型的搭建、模型训练、测试、网络的复用、直观查看数据集的图片预测结果等,完成了机器学习领域的Hello world——手写数字识别。

Bossfrank的博客 1万+

PyTorch构建卷积神经网络(CNN)训练模型:分步指南

PyTorch构建卷积神经网络(CNN)训练模型:分步指南

阿旭的博客 1万+

基于pytorch使用实现CNN 如何使用pytorch构建CNN卷积神经网络

基于pytorch使用实现CNN 如何使用pytorch构建CNN卷积神经网络 本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子 基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基于最简单的特征提取方法。

刘文凯的博客 4630

搭建CNN卷积神经网络(用pytorch搭建)

手撕卷积神经网络—CNN 卷积:提取特征 池化:压缩特征 heigh X weigh X depth 长度 宽度。深度(也就是特征图个数) 例如输入32x32x3 hxwxc 卷积就是取某个小区域进行特征计算用此处的 特征值x权重特征 进而得到最终数据输出 filter相当于助手可以有一个 但是也可以有多个 可以定义f1 f2 f3…当然得到特征图越丰富越是我们想要的结果但是多个卷积核的容积必须是相同 否则则无法相加。 移动步长 可以大一点也可以小一点用1就可以 卷积核尺寸 可以大一点 也可以小一点 大的话

weixin_46900108的博客 9081

CNN卷积神经网络简单示例(PyTorch)

CNN卷积神经网络简单示例(PyTorch)

两点点点的博客 7936
上一篇: PyTorch学习笔记(三)参数初始化与各种Norm层
下一篇: PyTorch学习笔记(四)损失函数
longrootchen
博客等级 码龄7年 19粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值