深度学习篇代码实战搭建简单神经网络结构
本篇文章致于搭建一个框架最为简单的基础神经网络模块 ,将通过注释与代码对整体内容做详细的讲解 ,只要有一点基础 ,就都能够听懂
首先讲解一下搭建神经网络的步骤: 具体步骤在我上一篇文章 [深度学习篇学习回顾与心得2]https://blog.csdn.net/2402_88373328/article/details/158977079?fromshare=blogdetail&sharetype=blogdetail&sharerId=158977079&sharerefer=PC&sharesource=2402_88373328&sharefrom=from_link
搭建神经网络的步骤:
1- 定义一个类 ,继承自 nn.Module
2-实现两个方法:
__init__ 方法
- 初始化父类
- 设置属性值
- 定义神经网络结构: 隐藏层有几层 ,输出的的结构是怎样的等等
- 参数初始化 w 和 b 进行初始化
forward前向传播方法
将数据送入到搭建好的网络模型中 ,对模型进行训练
接下来是代码部分
import torch # 用于访问 PyTorch 框架的核心功能 import torch.nn as nn # 专门用于构建神经网络的组件 ,torch.nn是torch模块的子组件 # pip install torchsummary # 查看神经网络模型各层参数信息的工具 from torchsummary import summary class MyModel(nn.Module): def __init__(self): # a、初始化父类:也就是调用父类中的初始化方法 super().__init__() # b、设置属性值/参数值【目前不需要】 # c、定义神经网络结构:输入层不需要定义,要定义隐藏层有几层、输出层是怎样的等 # 1.1- 隐藏层 # 第一层隐藏层 """ 参数解释: in_features:输入的特征个数。也就是上游神经元的个数 out_features:输出的特征个数。也就是本层神经元的个数 nn.linear() 就表示线性求和函数 """ self.linear1 = nn.Linear(in_features=3,out_features=3) # 第二层隐藏层 self.linear2 = nn.Linear(in_features=3,out_features=2) # 1.2- 输出层 self.output = nn.Linear(in_features=2,out_features=2) # d、参数初始化:w、b如何进行初始化 # 隐藏层1的初始化 nn.init.xavier_normal_(self.linear1.weight) # w初始化 nn.init.zeros_(self.linear1.bias) # b初始化 # 隐藏层2的初始化 nn.init.kaiming_normal_(self.linear2.weight) # w初始化 nn.init.zeros_(self.linear2.bias) # b初始化 def forward(self,data): """ 前向传播。对模型进行训练,也就是得到预测结果 :param data: 前向传播送入到网络结构中的样本数据。类型是张量tensor :return: """ # 1- 数据经过第一层隐藏层 # 1.1- 分开版 # 先进行线性求和 # linear1_result = self.linear1(data) # 再将线性求和结果给到激活函数,得到激活值 # data = torch.sigmoid(linear1_result) # 1.2- 合并版【推荐】 data = torch.sigmoid(self.linear1(data)) # 2- 数据经过第二层隐藏层 data = torch.relu(self.linear2(data)) # 3- 数据经过输出层得到输出结果 """ 数据并不是一次只处理一条数据,而是批量传入,这就导致了多维数据, 而softmax中dim的默认参数为None,这会使得softmax()会不分维度 将所有的数据全部展开计算概率值,这样的结果往往是错误的, 我们需要的是softmax对每组数据中的每条数据进行概率值计算, 这就是写上dim=-1的理由 dim=-1:不管列表嵌套多少层,全部只对最里层(最后一个维度)的数据(最后一个维度代表的即单条数据的特征数据)进行统计 """ return torch.softmax(self.output(data),dim=-1) # 测试网络模型 if __name__ == '__main__': # 1- 准备训练数据:目前的需求中,每条样本必须有3个特征 # 创建服从标准正态分布(均值为 0,方差为 1)的随机张量 # batch size(数据数量) ,input features(每条数据的特征数) # 10:多少条样本;3:每条样本多少个特征 data = torch.randn(10, 3) # 2- 创建神经网络模型对象 my_model = MyModel() # 3- 模型训练:将数据输入到神经网络中,进行前向传播 # 内部自动调用forward方法 output = my_model(data) print(f"预测结果是:{output}") print(f"预测结果形状:{output.shape}") print("-" * 30) # 4- 查看神经网络的概要信息【理解】 """ summary(参数1,参数2,参数3):查看神经网络各层参数的信息 参数1:神经网络算法实例对象 参数2:输入的特征个数,类型必须是元组 参数3:输入的每个批次样本条数,任意 """ summary(my_model, (3,), 2)
对于代码中仍然不理解的地方可以通过询问AI大模型相关问题进行进一步的深入 ,后续还会有具体的代码实战代码理解 ,对于想学习深度学习的新同学们,这段简单代码是必须要掌握的
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)