1. 神经网络_搭建流程介绍想搭建一个自己的神经网络类写一个类继承 nn.Module重新两个方法__init__和forward__init__加了双下划线的叫魔法方法特点是 不需要手动调在特定场合下会自动调用几个隐藏层、几个输出层、每个隐藏层有几个神经元都是在 init里定义forward 前向传播此方法所以然不是魔法方法但其用法与魔法方法一样实例化模型时底层会自动调用 forward 方法➕1指 bias隐藏层 1的输入有3 个输出有 3个即 Linear(33)隐藏层 1的输入有3 个输出有 2个即 Linear(32)输出层22整个模型参数个数隐藏层 1的每个神经元有 4个参数(3个x 1个偏置)∴隐藏层 1参数共 4 *312个隐藏层 12的每个神经元有 4个参数(3个x 1个偏置)∴隐藏层 2参数共 4 *28个输出层的每个神经元有 3个参数(2个x 1个偏置)∴输出层参数共 3 *26个所以整个模型参数共 128626个2. 神经网络_搭建代码实现dim-1,表示按行计算即一条样本 一条样本的处理如 5行3列的一批数据处理时先拿出第1行数据对其转置然后把这行数据的各个列充当特征进行计算再依次处理第 2行、第 3行… ∴dim-1表示按行处理3. 神经网络_模型训练batch_size 5即5 批每批次 5条每条 3个特征即输入层53每个样本有 3列隐藏层 1处理完 是3列即53隐藏层2 处理完 2列52输出层 2列所以输出层是52代码 案例演示神经网络搭建流程 深度学习案例的4个步骤: 1.准备数据. 2.搭建神经网络 3.模型训练 4.模型测试 神经网络搭建流程: 1.定义一个类继承:nn.Module 2.在_init_(方法中搭建神经网络. 3.在forward()方法中完成:前向传播. # 导包importtorchimporttorch.nnasnnfromtorchsummaryimportsummary# 计算模型参数查看模型结构# todo1.搭建神经网络即自定义类继承nn.ModuleclassModelDemo(nn.Module):# todo1.在init魔法方法中 完成初始化 父类成员及神经网络搭建def__init__(self):# 1.1 初始化父类super().__init__()# 1.2 搭建神经网络 -- 隐藏层 输出层# 1.2.1 创建隐藏层# 隐藏层1输入特征数 3输出特征数 3self.linear1nn.Linear(in_features3,out_features3)# 隐藏层2输入特征数 3输出特征数 2self.linear2nn.Linear(in_features3,out_features2)# 输出层输入特征数 2输出特征数 2self.outputnn.Linear(in_features2,out_features2)# 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) # 激活函数# 合并版写法xtorch.sigmoid(self.linear1(x))# 1.2 第2层 隐藏层计算加权求和 激活函数(ReLU)xtorch.relu(self.linear2(x))# 1.3 输出层计算加权求和 激活函数(Softmax)# dim-1,表示按行计算即一条样本一条样本的处理xtorch.softmax(self.output(x),dim-1)# 1.4 返回预测值returnx# todo2.模型训练deftrain():# 1.创建模型my_modelModelDemo()# print(fmy_model: {my_model})# 2.创建数据集样本随机生成datatorch.randn(size(5,3))print(fdata:{data})print(fdata.shape:{data.shape})# (5行, 3列)print(fdata.requires_grad:{data.requires_grad})# 默认为False 不自动微分# 3.调用神经网络模型 -- 进行模型训练outputmy_model(data)# 底层自动调用了 forward()方法进行前向传播 ∴会自动微分print(foutput:{output})print(foutput.shape:{output.shape})# (5行, 2列)print(foutput.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(fname:{name})print(fparam:{param}\n)# print(fparam.shape: {param.shape})# print(fparam.requires_grad: {param.requires_grad})# todo3.测试if__name____main__:train()