news 2026/6/25 19:48:24

4. 神经网络搭建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4. 神经网络搭建

1. 神经网络_搭建流程介绍





(想搭建一个自己的神经网络类,写一个类继承 nn.Module,重新两个方法:__init__forward__init__加了双下划线的叫魔法方法,特点是 不需要手动调,在特定场合下会自动调用;几个隐藏层、几个输出层、每个隐藏层有几个神经元都是在 init里定义;forward 前向传播,此方法所以然不是魔法方法,但其用法与魔法方法一样,实例化模型时,底层会自动调用 forward 方法
➕1指 bias,隐藏层 1的输入有3 个,输出有 3个即 Linear(3,3),隐藏层 1的输入有3 个,输出有 2个即 Linear(3,2),输出层(2,2);整个模型参数个数?:隐藏层 1的每个神经元有 4个参数(3个x + 1个偏置),∴隐藏层 1参数共 4 *3=12个;隐藏层 12的每个神经元有 4个参数(3个x + 1个偏置),∴隐藏层 2参数共 4 *2=8个;输出层的每个神经元有 3个参数(2个x + 1个偏置),∴输出层参数共 3 *2=6个;所以整个模型参数共 12+8+6=26个;


2. 神经网络_搭建代码实现

(dim=-1,表示按行计算即一条样本 一条样本的处理,如 5行3列的一批数据,处理时先拿出第1行数据,对其转置,然后把这行数据的各个列充当特征进行计算;再依次处理第 2行、第 3行… ∴dim=-1表示按行处理;

3. 神经网络_模型训练

(batch_size =5即5 批,每批次 5条,每条 3个特征,即输入层(5,3),每个样本有 3列;隐藏层 1处理完 是3列即(5,3),隐藏层2 处理完 2列(5,2),输出层 2列,所以输出层是(5,2);)


代码:

""" 案例:演示神经网络搭建流程 深度学习案例的4个步骤: 1.准备数据. 2.搭建神经网络 3.模型训练 4.模型测试 神经网络搭建流程: 1.定义一个类,继承:nn.Module 2.在_init_(方法中,搭建神经网络. 3.在forward()方法中,完成:前向传播. """# 导包importtorchimporttorch.nnasnnfromtorchsummaryimportsummary# 计算模型参数,查看模型结构# todo:1.搭建神经网络,即:自定义类继承nn.ModuleclassModelDemo(nn.Module):# todo:1.在init魔法方法中 完成初始化 父类成员,及神经网络搭建def__init__(self):# 1.1 初始化父类super().__init__()# 1.2 搭建神经网络 --> 隐藏层 + 输出层# 1.2.1 创建隐藏层# 隐藏层1:输入特征数 3,输出特征数 3self.linear1=nn.Linear(in_features=3,out_features=3)# 隐藏层2:输入特征数 3,输出特征数 2self.linear2=nn.Linear(in_features=3,out_features=2)# 输出层:输入特征数 2,输出特征数 2self.output=nn.Linear(in_features=2,out_features=2)# 1.3 对隐藏层进行参数初始化# 隐藏层1nn.init.xavier_normal_(self.linear1.weight)nn.init.zeros_(self.linear1.bias)# 隐藏层2nn.init.kaiming_normal_(self.linear2.weight)nn.init.zeros_(self.linear2.bias)# todo: 1.2 前向传播:传入层 --> 隐藏层1 ---> 隐藏层2 ---> 输出层defforward(self,x):# 1.1 第1层 隐藏层计算:加权求和 + 激活函数(Sigmoid)# 分解版写法# x = self.linear1(x) # 加权求和# x = torch.sigmoid(x) # 激活函数# 合并版写法x=torch.sigmoid(self.linear1(x))# 1.2 第2层 隐藏层计算:加权求和 + 激活函数(ReLU)x=torch.relu(self.linear2(x))# 1.3 输出层计算:加权求和 + 激活函数(Softmax)# dim=-1,表示按行计算即一条样本一条样本的处理x=torch.softmax(self.output(x),dim=-1)# 1.4 返回预测值returnx# todo:2.模型训练deftrain():# 1.创建模型my_model=ModelDemo()# print(f"my_model: {my_model}")# 2.创建数据集样本,随机生成data=torch.randn(size=(5,3))print(f"data:{data}")print(f"data.shape:{data.shape}")# (5行, 3列)print(f"data.requires_grad:{data.requires_grad}")# 默认为False 不自动微分# 3.调用神经网络模型 --> 进行模型训练output=my_model(data)# 底层自动调用了 forward()方法进行前向传播 ∴会自动微分?print(f"output:{output}")print(f"output.shape:{output.shape}")# (5行, 2列)print(f"output.requires_grad:{output.requires_grad}")# True 自动微分# 4.计算和 查看模型参数# 参1:(神经网络)模型对象,参2:输入数据维度(5行3列)print('=============计算模型参数=============')summary(my_model,input_size=(5,3))# 计算模型参数print('=============查看模型参数=============')forname,paraminmy_model.named_parameters():print(f"name:{name}")print(f"param:{param}\n")# print(f"param.shape: {param.shape}")# print(f"param.requires_grad: {param.requires_grad}")# todo:3.测试if__name__=='__main__':train()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:45:28

从零开始理解 TF-IDF:原理、推导与滑动窗口实战

在信息检索与文本挖掘中,如何衡量一个词对一篇文档的重要性?TF-IDF 是最经典、最直观的答案之一。本文将从基本概念出发,推导 TF-IDF 公式,并通过一个真实的编程问题(滑动窗口 时间权重 余弦相似度)展示其…

作者头像 李华
网站建设 2026/6/23 19:27:34

当贝盒子H5 64G版618首销TOP1!多平台登顶,凭什么这么火?

2026年5月14日,当贝官方发布了618抢先购首日当贝盒子H5 64G版的首销战报。据官方数据显示,这款重磅升级的电视盒子在京东、天猫、抖音三大主流电商平台的电视盒子类目热销榜中,全部拿下TOP1席位,成为今年618大促第一天的现象级爆款…

作者头像 李华
网站建设 2026/6/23 19:27:35

STM32单片机串口通信避坑指南:从CubeMX配置到中断回调函数编写

STM32单片机串口通信避坑指南:从CubeMX配置到中断回调函数编写 在嵌入式开发领域,UART串口通信堪称最基础却又最容易"踩坑"的技术之一。无论是参加蓝桥杯等竞赛的学生,还是工业项目的开发工程师,几乎都会遇到各种串口通…

作者头像 李华