【Pytorch深度学习开发实践学习】Pytorch实现LeNet神经网络(1)

1.model.py

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

引入pytorch的两个模块
关于这两个模块的作用,可以参考下面
Pytorch官方文档
在这里插入图片描述
torch.nn包含了构成计算图的基本模块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
torch,nn.function包括了计算图中的各种主要函数,包括:卷积函数、池化函数、注意力机制函数、非线性激活函数、dropout函数、线性函数、距离函数、损失函数、可视化函数和多GPU分布式函数等。

class LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv1 = nn.Conv2d(3, 16, 5)self.pool1 = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(16, 32, 5)self.pool2 = nn.MaxPool2d(2, 2)self.fc1 = nn.Linear(32*5*5, 120)self.fc2 = nn.Linear(120, 84)self.fc3 = nn.Linear(84, 10)

我们构建了从torch.nn.Module类下面继承的LeNet类,这个类构建了LeNet神经网络,所有pytorch定义的神经网络模型都从nn.Module类派生。

首先def init(self):是类的初始化函数,当我们创建这个类的一个实例时,这个函数会被调用。

super(LeNet, self).init()是调用父类nn.Module的初始化函数,这是一个标准的做法,确保父类中的任何初始化都被正确的执行。

self.conv1 = nn.Conv2d(3, 16, 5)调用nn.function的二维卷积函数,定义了第一个卷积层的操作,输入的通道数是3,输出通道数16,5*5的卷积核

self.pool1 = nn.MaxPool2d(2, 2)调用了最大池化函数,定义了第一个池化层的操作,池化窗口的大小是2*2

self.conv2 = nn.Conv2d(16, 32, 5)定义了第二个卷积层的操作,输入通道数是16,因为第一个卷积层的输出通道数是16,这一层的输出通道数是32,5*5的卷积核

self.pool2 = nn.MaxPool2d(2, 2)调用了最大池化函数,定义了第二个池化层的操作,池化窗口的大小是2*2

self.fc1 = nn.Linear(3255, 120)定义了一个全连接层,输入特征是3255,这是前一层输出的特征数与卷积核大小、步长和填充的综合结果),输出特征数为120。

self.fc2 = nn.Linear(120, 84)定义另一个全连接层,输入特征数为120,输出特征数为84。

self.fc3 = nn.Linear(84, 10) 定义最后一个全连接层,输入特征数为84,输出特征数为10。这个输出特征数通常对应于分类问题的类别数(如果有10个类别的话)。

LeNet模型是一个经典的卷积神经网络结构,主要用于图像分类任务。它包括两个卷积层、两个池化层和三个全连接层。

    def forward(self, x):x = F.relu(self.conv1(x))    # input(3, 32, 32) output(16, 28, 28)x = self.pool1(x)            # output(16, 14, 14)x = F.relu(self.conv2(x))    # output(32, 10, 10)x = self.pool2(x)            # output(32, 5, 5)x = x.view(-1, 32*5*5)       # output(32*5*5)x = F.relu(self.fc1(x))      # output(120)x = F.relu(self.fc2(x))      # output(84)x = self.fc3(x)              # output(10)return x

这段代码定义了一个神经网络的前向传播过程。

def forward(self, x):
定义一个名为forward的方法,它描述了数据从输入到输出的前向传播过程。

x = F.relu(self.conv1(x))
输入数据x经过第一个卷积层self.conv1,然后通过ReLU激活函数。输入是33232,输出的大小为(16, 28, 28)。

x = self.pool1(x)
对上一步的输出进行最大池化操作,输出的大小变为(16, 14, 14)。

x = F.relu(self.conv2(x))
输入数据x经过第二个卷积层self.conv2,然后通过ReLU激活函数。输出的大小为(32, 10, 10)。

x = self.pool2(x)
对上一步的输出进行最大池化操作,输出的大小变为(32, 5, 5)。

x = x.view(-1, 3255)
对上一步的输出进行展平操作,即将三维数据变为二维数据。输出的大小为(-1, 3255),其中-1表示批量大小,可以自动计算。

x = F.relu(self.fc1(x))
对展平后的数据x进行全连接操作,然后通过ReLU激活函数。输出的大小为120

x = F.relu(self.fc2(x))
对上一步的输出进行全连接操作,然后通过ReLU激活函数。输出的大小为84

x = self.fc3(x)
对上一步的输出进行全连接操作,不使用激活函数。输出的大小为(10)。这通常表示有10个类别。

return x
返回最终的输出结果。

这个前向传播过程描述了数据从输入到输出的整个流程,包括卷积、池化、全连接和激活函数等操作。

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

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

相关文章

python Matplotlib Tkinter--pack 框架案例

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 版本一 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox…

优思学院|精益生产管理在中国的发展前景

在这个快速变化的世界里,有一个管理理念悄然崛起,它就是精益生产。 这个概念最早由詹姆斯P沃麦克、丹尼尔T琼斯和丹尼尔鲁斯在他们的著作《改变世界的机器》中提出,后来在丰田汽车公司的成功实践中得到了广泛的认可。 这本书不仅风靡全球&a…

Springboot中如何记录好日志

Springboot中如何记录日志 日志体系整体介绍 日志一直在系统中占据这十分重要的地位,他是我们在系统发生故障时用来排查问题的利器,也是我们做操作审计的重要依据。那么如何记录好日志呢?选择什么框架来记录日志,是不是日志打越…

Selenium 自动化遇见 shadow-root 元素怎么处理?

shadow-root是前端的特殊元素节点,其使用了一个叫做shadowDOM的技术做了封装,shadowDOM的作用可以理解为在默认的DOM结构中又嵌套了一个DOM结构(和iframe有点类似,只不过iframe内嵌的是HTML),我们遇见shado…

LMDeploy 大模型量化部署

Weight Only量化是一种常见的模型优化技术,特别是在深度学习模型的部署中。这种技术仅对模型的权重进行量化,而不涉及激活(即模型中间层的输出)。选择采用Weight Only量化的原因主要包括以下几点: 减少模型大小 通过将…

VirtualBox虚拟机安装 Linux 系统

要想学习各种计算机技术,自然离不开Linux系统。并且目前大多数生产系统都是安装在Linux系统上。常用的Linux系统有 Redhat,Centos,OracleLinux 三种。 三者的区别简单说明如下: Red Hat Enterprise Linux (RHEL): RHEL 是由美国…

ICASSP2024 | MLCA-AVSR: 基于多层交叉注意力机制的视听语音识别

视听语音识别(Audio-visual speech recognition, AVSR)是指结合音频和视频信息对语音进行识别的技术。当前,语音识别(ASR)系统在准确性在某些场景下已经达到与人类相媲美的水平。然而在复杂声学环境或远场拾音场景&…

大语言模型推理加速技术:计算加速篇

原文:大语言模型推理加速技术:计算加速篇 - 知乎 目录 简介 Transformer和Attention 瓶颈 优化目标 计算加速 计算侧优化 KVCache Kernel优化和算子融合 分布式推理 内存IO优化 Flash Attention Flash Decoding Continuous Batching Page…

Go Run - Go 语言中的简洁指令

原文:breadchris - 2024.02.21 也许听起来有些傻,但go run是我最喜欢的 Go 语言特性。想要运行你的代码?只需go run main.go。它是如此简单,我可以告诉母亲这个命令,她会立即理解。就像 Go 语言的大部分功能一样&…

微调实操四:直接偏好优化方法-DPO

在《微调实操三:人类反馈对语言模型进行强化学习(RLHF)》中提到过第三阶段有2个方法,一种是是RLHF, 另外一种就是今天的DPO方法, DPO通过直接优化语言模型来实现对其行为的精确控制,而无需使用复杂的强化学习,也可以有效学习到人类偏好,DPO相…

python中的类与对象(2)

目录 一. 类的基本语法 二. 类属性的应用场景 三. 类与类之间的依赖关系 (1)依赖关系 (2)关联关系 (3)组合关系 四. 类的继承 一. 类的基本语法 先看一段最简单的代码: class Dog():d_…

智慧公厕的目的和意义是什么?

智慧公厕是近年来城市建设中的一项重要举措,其目的在于实现公共厕所的智慧化管理,为市民群众提供更好的服务体验,助力智慧城市和数字环卫的发展,提升社会公共卫生服务水平。 与此同时,智能公厕也具有重要的意义&#x…

springboot+vue实现微信公众号扫码登录

通常在个人网站中,都会有各种第三方登录,其中微信登录需要认证才能使用,导致个人开发者不能进行使用此功能,但是我们可以使用微信公众号回复特定验证码来进行登录操作。 微信关键词处理 微信公众号关键词自动回复,具体…

60kW 可编程直流回馈负载箱的优势和特点

60kW可编程直流回馈负载箱是一种先进的电力设备,主要用于模拟电网中的负载,为电力系统提供稳定的负载环境。它具有许多优势和特点,使其在电力系统中得到了广泛的应用。 60kW可编程直流回馈负载箱具有高效的能源转换效率,能够将电能…

人机界面和三菱PLC之间以太网通信

本文主要描述人机界面WinCC如何与三菱Q系列PLC进行以太网通讯,主要介绍了CPU自带以太网口和扩展以太网模块两种情况以及分别使用TCP、UDP两种协议进行通讯组态步骤及其注意事项。 一、 说明 WinCC从V7.0 SP2版本开始增加了三菱以太网驱动程序,支持和三…

Windows常用协议

LLMNR 1. LLMNR 简介 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6,是仅次于DNS 解析的名称解析协议。 2.LLMNR 解析过程 当本地hosts 和 DNS解析 当本地hosts 和 …

docker 常用指令(启动,关闭,查看运行状态)

文章目录 docker 常用指令启动 docker关闭 docker查看 docker的运行状态 docker 常用指令 启动 docker systemctl start docker关闭 docker systemctl stop docker查看 docker的运行状态 systemctl status docker如下图所示: 表示docker正在运行中

集合框架体系和使用1(Collection)

Map的不同实现类单独再搞一章讲 目录 数组的特点、弊端与集合框架体系介绍 数组 特点 弊端 Java集合框架体系(java.util包下) java.util.Collection:存储一个一个的数据(主要讲两个子接口) java.util.Map:存储一对一对的数据…

基于uniapp大学生社团活动管理系统python+java+node.js+php微信小程序

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 语言:pythonjavanode.jsphp均支持 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 运行软件:idea/eclipse/vscod…

递归和迭代【Py/Java/C++三种语言详解】LeetCode每日一题240218【树DFS】LeetCode 589、 N 叉树的前序遍历

有LeetCode算法/华为OD考试扣扣交流群可加 948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1336了解算法冲刺训练 文章目录 题目描述解题思路代码方法一:递归法PythonJavaC时空复杂度 方法二:迭代法PythonJavaC时空复杂度 …